2012-02-28 30 views
1

@embeddableを使用して複合キークエリを実行しようとしています。Hibernateクエリ複合キー

これまで私がこれまで行ってきたことは次のとおりです。

@Embeddable 
public class IfasvVendorPK implements Serializable{ 

@Column(length = 4, nullable = false) 
protected String peId; 
@Column(length = 8, nullable = false) 
protected String peAddrCd; 

エンティティ

@Entity 
public class IfasvVendor implements Serializable { 

@EmbeddedId 
private IfasvVendorPK ifasvVendorPK; 

クエリ

リスト2つのPKSが含まれています。私はこれのためのリストを使用する必要があるかどうか分からない。

  Query query = session.createQuery("from IfasvVendor t0 where  t0.ifasvVendorPK.peId=:id"); 
      query.setParameter("id", list); 
      query.list(); 

また、クエリが機能したらオブジェクトを取得する方法もわかりませんでした。

+0

これはコンポジットキーのクエリではなく、コンポジットキーの属性で検索しています。これが達成しようとしていることを確認してください。どのような場合でも、属性のリストを渡すと仮定すると、あなたの現在のクエリは間違っています。これを代わりに使う - 'IfasvVendor t0からどこにt0.ifasvVendorPK.peId:idList'と' query.setParameter( "idList"、list) 'を使います。 – Perception

答えて

2

私は、次の動作するはずと信じています:

Query query = session.createQuery("from IfasvVendor t0 where t0.ifasvVendorPK.peId in (:id)"); 
query.setParameterList("id", list); 

query.list(); 

あなたのクエリでかっこ内にある指定されたパラメータを囲み、setParameterListを使用する必要があります。 setParameterListのjavadocを参照してくださいhere

クエリ結果は、query.list()によって返されるリストになります。これにより、チェックされていないリストが返され、List<IfasvVendor>にキャストすることができます。

btw。これは複合キーのクエリではありません。 @Perception comment ...を参照してください。

+0

私はあなたと知覚が正しいと信じています。私は修正を試す機会がありませんでしたが、それは非常に有望です。 –