Ticket #22663

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

Open Date: 2010-07-30 14:17 Last Update: 2010-07-30 14:59

Reporter:
Owner:
Type:
Status:
Open [Owner assigned]
Component:
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
None
File:
None

Details

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

  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の条件とパラメーターを明示的に関連付けて指定できるようにすべきかと思います。

Ticket History (2/2 Histories)

2010-07-30 14:17 Updated by: bcohimei
  • New Ticket "Mirage SqlManagerImpl#findEntity に指定する可変引数の順番が明示的でない" created
2010-07-30 14:59 Updated by: bcohimei
  • Details Updated

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login