2009-09-24 15 views
7

このクラスをエンティティとしてマップします。これをPersonと呼ぶことができます。 Personには、Addressとの組み込み/コンポーネントの関係があります。 Addressオブジェクトを返すCriteriaを使用するのに問題があります。 私はこれを試しました:Hibernate Criteria APIを使用してemebeddedまたはコンポーネントを取得します。api

Criteria.createCriteria(Address.class) 

これは動作しません。私はエンティティを通過する必要があると思うが、私はいくつかの種類の投影が必要でしょうか?

Criteria.createCriteria(Person.class).<<what goes here???>> 

提案ですか?

答えて

6

コンポーネントの有効期間は、所有者によって制御されます。彼らは協会とはみなされません。したがって、クエリからコンポーネントを単独で取得することはできません。ただし、条件で使用することはできます。

Criteria.createCriteria(Person.class) 
.add(Restrictions.eq("address.street", street)); 
+0

[OK]を明確にし、私はHQLを行うと、直接アドレスを取得することができますどのように来ますか?なぜ同じことがクエリに適用されないのですか? – Konstantin

+0

HQLにはCriteria APIにはない機能があるため。あなたが本当にあなたの住所を一人で返そうとするならば、Addressのすべてのプロパティを含むPersonベースの基準の投影リストを作成し、結果に 'AliasToBeanResultTransformer'を適用することができます。しかし、これは多くの頭痛とそれに示すことは何もありません。私は完全な人を代わりに選択し、アドレスを抽出する(それが必要なものならば)Javaコードで。または、HQLと一緒に行く。 – ChssPly76

0

これは1が休止状態に埋め込まれたオブジェクトのプロパティを取得または参照することができる方法である:あなたの「住所」クラスは「人」内の「アドレス」としてマッピングされている、あなたのような何かができると仮定すると、

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
       Parent.class,"parent"); 
criteria.createAlias("embeddedObjectFieldName", "parent.embeddedObjectFieldName"); 

criteria.setProjection(Projections.projectionList() 
       .add(Projections.groupProperty("parent.propertyOne")) 
       .add(Projections.max("embeddedObjectFieldName.embeddedobjectproperty"))); 

希望は上記

関連する問題