2016-06-24 13 views
3

私は2つのエンティティオブジェクトを持ち、それらの間に1対多数の関連付けを持っています。Hibernate:競合オブジェクトをフェッチしないgetId()を1対多

「One」と「Many」と呼ぶことができます。フェッチを「レイジー」と設定しました。

"Many"オブジェクトがあり、 "One"オブジェクトのIDを取得しようとすると、Hibernateは内部的に完全なオブジェクトをフェッチしました。一方、それはID「One」を含むため、エンティティ「Many」に基づいてIDを与えることができます。 Idの「ワン」で、主キー、および外部キー「多くの」

many.getOne().getId() //fetches complete "One" object 

ことが可能であり、どのように?

+0

いいえ、idだけを取得することはできません。 Hibernateは、プロパティを持たないオブジェクトで動作します。 – Jens

+0

実際、私はそれが可能なところで働いたプロジェクトを覚えています。私はあなたがoneToMany注釈と両方のエンティティをリンクしていないが、単純な整数であるかのようにIDを取得すれば、それは機能すると思います。たぶん同じエンティティの属性とidOneの両方を持つことができます – VLef

答えて

4

もちろん可能です。あなたはFetchType.LAZYを使用して、この方法でidを取得することができます:それは、テーブルの関連付けを参加しないと、外部キーの団体でのみ動作します

LazyInitializer initializer = ((HibernateProxy) many.getOne()).getHibernateLazyInitializer(); 
Long id = (Long) initializer.getIdentifier(); 

または、HQLまたは投影法を使用して、唯一idを得ることができます。

+0

ニースは、そのようなlazysで作業できるとは考えていませんでした! – VLef

+0

@VLef Hibernateは、同じテーブルに存在するため、外部キーを持っています。しかし、もちろん、ジョインテーブルでは動作しません。 –

+0

確かに、この外部キーは、エンティティをロードせずにデフォルトで完全に隠されているので、最終的にそれを得る方法を知ってうれしいです=) – VLef

2

HQLクエリを作成し、IDのみを選択する必要があります。

関連する問題