2016-08-25 7 views
1
Criteria crit = sess.createCriteria(Cat.class); 
crit.setMaxResults(50); 
List cats = crit.list(); 

catsは現在のセッションで永続オブジェクトになるでしょうかsessオブジェクトをロードするHibernateの基準。オブジェクトは永続化されますか?

APIを確認しましたが、何も言及していません。私はこれを心配しています。だから、オブジェクトが永続的かどうかを公式に言及することができれば幸いです。オブジェクトをロードするために初めてHibernateのsessionを使用したとき、オブジェクトが永続的になることを認識できず、オブジェクト内の値、変更はデータベースにフラッシュされ、私にとっては非常に大きな問題を引き起こします。このhttps://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.htmlに基づい

特定の永続クラスに対してクエリを表すorg.hibernate.Criteriaインターフェース。

返されるオブジェクトが永続的であることを意味しますか?オブジェクト内の値を安全に変更できますか?

オブジェクトは永続的ではありません場合は

、なぜ setReadOnly属性を制御する必要がAPIドキュメント:この基準 によってロードされたエンティティおよびプロキシの

読み取り専用に設定/変更可能なモード。この設定は、永続コンテキスト のデフォルト設定を上書きします。

これは非常に混乱しています。

答えて

1

現在のセッションでは永続化されます。オブジェクト値を変更してフラッシュすると、トランザクションが終了するとデータベースに保存されます。 https://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/objectstate.html段落10.4.1を確認してください。クエリの実行

通常、クエリは、list()を呼び出すことによって実行されます。 クエリの結果は、メモリ内のコレクションに完全にロードされます。クエリによって取得されたエンティティ インスタンスは、永続的な状態にあります。

+0

これはあまりにも悪い...私はHibernateを介してデータをフェッチすることができますが、永続状態ではないことを知っていますか?これは気付かずに誤ってフラッシュした場合、非常に危険です... – GMsoF

+0

セッションからオブジェクトを切り離すか、session.setDefaultReadOnly(true)を実行します。詳細なオプションは次のとおりです:http://stackoverflow.com/questions/5800814/is-it-possible-to-detach-hibernate-entity-so-that-c​​hanges-to-object-are-not-aut – Justas

+0

ありがとう共有。あまりにも悪いことに、データロード後にいつも分離する必要がある場合、それは面倒です。 'setDefaultReadOnly'を使うと、特定の永続オブジェクトではなくすべての永続オブジェクトが削除されます。これ以外にも、休止状態のデータは自動的に非永続オブジェクトに変換されます。 – GMsoF

関連する問題