チケット #22663

Mirage SqlManagerImpl#findEntity に指定する可変引数の順番が明示的でない

登録: 2010-07-30 14:17 最終更新: 2010-07-30 14:59

報告者:
担当者:
チケットの種類:
状況:
オープン [担当者決定済み]
コンポーネント:
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
なし

詳細

エンティティクラスに複数のプライマリーキーフィールドがあったとします。

  1. public class SomeEntity {
  2. @PrimaryKey(persistent=true)
  3. private String key1;
  4. @PrimaryKey(persistent=true)
  5. private String key2;
  6. private String value;
  7. // コンストラクタ、getter/setterは省略
  8. }

このとき、SqlManagerImpl#findEntityの第2引数以後に指定する引数の順番が、必ずしもエンティティクラスでの宣言順でよいとは限りません。つまり、key1に"1"、key2に"2"を指定して検索したい場合でも・・・

  1. SomeEntity entity = findEntity(SomeEntity.class, "1", "2");
とすべきか
  1. SomeEntity entity = findEntity(SomeEntity.class, "2", "1");
とすべきなのかは、実際に実行してみてMirageが出力するデバッグ文をみないと判断できません。

おそらく、java.lang.Class#getMethodsやjava.lang.Class#getFieldsが返す配列の要素の並び方に依存しているのではないでしょうか?これらのメソッドが返す配列の要素の順番は不定であるとされています。

以下は提案ですが、insertEntity や deleteEntity と使用法が同様になるように

  1. public <T> T findEntity(T param)

とするか、あるいは

  1. public <T> T findEntity(Class<T> clazz, Map<String, Object> param)

として、WHEREの条件とパラメーターを明示的に関連付けて指定できるようにすべきかと思います。

添付ファイルリスト

添付ファイルはありません

チケットの履歴 (2 件中 2 件表示)

2010-07-30 14:17 更新者: bcohimei
  • 新しいチケット "[Mirage] SqlManagerImpl#findEntity に指定する可変引数の順番が明示的でない" が作成されました
2010-07-30 14:59 更新者: bcohimei
  • 詳細が更新されました

編集

このチケットにコメントを追加するには、ログインが必要です » ログインする