2011-01-04 15 views
4

lazy = "false"およびbatch-size = "100"を指定したエンティティがあります。それは正常に動作していますが、私はバッチサイズを削除し、lazy = "true"を設定したい場合もあります。私がhbmファイルを変更すると、他のアプリケーションに影響します。現在のセッションのエンティティのプロパティをhqlを実行する前に変更できる方法はありますか?実行時にハイバネートマッピングプロパティを変更する方法

答えて

8

実行時にHQLまたは基準クエリによってフェッチ戦略(遅延の有無)を変更することができます。

List cats = sess.createCriteria(Cat.class) 
.add(Restrictions.like("name", "Fritz%")) 
.setFetchMode("mate", FetchMode.EAGER) 
.setFetchMode("kittens", FetchMode.EAGER) 
.list(); 

from Cat as cat 
inner join fetch cat.mate 
left join fetch cat.kittens 

は基準クエリ、例えば代わり​​に基準APIの使用方法Criteria.setFetchMode(..)Hibernate Doku - 15.3. Associations and joins

を参照してください: HQLであなたは、たとえば、入社コレクションの値を初期化するためにに参加フェッチを使用することができます

これのためのHibernate Doku:16.5. Dynamic association fetching

2

フェッチ戦略を変更するには、Fetching Profilesを使用します。

+1

私が知っているように、バッチサイズを動的に変更する方法はありません。 SessionFactoryの作成に使用されたConfigurationオブジェクトを変更することで、設定時に変更することができます。 org.hibernate.cfg.Configuration.getClasses()およびorg.hibernate.mapping.Collection.setBatchSize()を参照してください。 – snorbi

+0

フェッチに関する追加情報は、http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#performance-fetchを参照してください。 – snorbi

関連する問題