2011-01-25 6 views
1

私の休止状態のマッピングとクエリに問題があります。 私はBとCとの関係を持つオブジェクトAを持っています。Hibernateはリンクされたオブジェクトを持つオブジェクトを取得します

フェッチモードは遅延(@ManyToOne(fetch = FetchType.LAZY))で、変更できません。 だから、私の問題は次です:

私はgetメソッド(hibernateDao.get)でオブジェクトを取得する場合、私はBとCの

と関係whitoutオブジェクトAを取得し、私は基準を作成した場合、私は関係を強制criteria.setFetchMode(...)とすると、クエリのみですべてを取得できます。しかし、私は主キーでオブジェクトを取得する基準を作ることが良いことではないことをWeb上で読んでいます。

getメソッドでこれを行う方法は?

ありがとうございました。

あなたがデフォルトとしてレイジーとして設定フェッチモードを持っているプロファイルを取得し、特定のクエリのためとしてイーガー使用することができます
+0

これは、J2EEとの関連があります。あらゆる質問がJ2EEでタグ付けされる必要はありません。とにかく[J2EEは長年死んでいる](http://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition#Nomenclature.2C_standards.2C_and_specifications) –

答えて

2

http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e3524

そして、あなたは、あなたは、支持体には、プロファイルを取得していないHibernateのバージョンを使用している場合、ジョインを使用して、必要なツリーを取得するHQLクエリを常に実行できます。

しかし、プライマリキーでオブジェクトを取得する基準を作るのは良いことではありません。

「悪い」と読んだだけで解決策を除外する前に、私は非常に注意します。これは、最終的には悪いことかもしれないが、これは悪いですなぜあなたは理解していない場合、あなたはあなたの特定のケース;-)

+0

FetchProfileはうまくいくようですが、私のバージョンではアノテーション(xmlで表示)(3.2)をサポートしていません:(条件は良い解決策をとってください) – Kiva

+0

HQLフェッチオプションはどのようなプロパティが必要かを指定する方法(http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html)これは3.3よりもずっと古いバージョンでサポートされています。 – 01es

0

コールHibernate.initialize();

例のために作られたソリューションを除外することができます:

myEntity = hibernateDao.get...; 
Hibernate.initialize(myEntity); 

これはmyEntity内のすべてのマップされたエンティティをロードするために休止状態に強制されます。

関連する問題