-1

Eclipselink Dynamic Persistence では、次の方法で複数の主キーを許可します DynamicTypeBuilder.setPrimaryKeyFields(String primarykeysField...)

しかし、Dynamic Persistence で(IdClass または EmbeddedId がないため)EntityManager.find( Entity Class , Object primaryKey)複合主キー (複数の主キー) の場合にエンティティを検索する方法でエンティティ オブジェクト (インスタンス)を検索するにはどうすればよいですか。

EclipseLink は find() 操作で pk のリストを取得しますが、例で定義された複合 pk キーの場合 -


Entity = Person
Fields = username,emailId,firstName,lastName
Composite PK = username,emailId

Class<?> clazz = new DynamicClassLoader(Thread.currentThread().getContextClassLoader()).createDynamicClass("Person");
DynamicTypeBuilder builder = new DynamicTypeBuilder(clazz, null, "Person");
DynamicType dynamicType = builder.getType();
builder.setPrimaryKeyFields(["username","emailId"]);
builder.addDirectMapping("username",String.class,"username");
builder.addDirectMapping("emailId",String.class,"emailId");
builder.addDirectMapping("firstName",String.class,"firstName");
builder.addDirectMapping("lastName",String.class,"lastName");

List list = new ArrayList();
list.add(${username}); //Run time value
list.add(${emailId}); //Run time value

次にEnitityManager.find(dynamicType.getJavaClass(),list)、これらの引数を取ります、私は正しいですか? 私が正しいと想定している場合、List 1 番目の引数が Mapやその他の DataStructureEnitityManager.find()ではなく、ユーザー名または emailId pk 値 (複合 pk フィールド値のシーケンスを意味する) であることを操作がどのように認識するのでしょうか。({username:${username},emailId:${emailId}})

4

1 に答える 1

-1

find() 操作で List を使用できるはずです。

于 2013-06-11T13:26:43.493 に答える