2011-12-07 4 views
2

だけ-読み込まれ、私は実体が読み取り専用に作った場合どのように伝えることができます:Hibernateのエンティティを使用して、それを取得した後か

Session session = (Session)entityManager.getDelegate(); 
session.setReadOnly(entity, makeReadOnly); 

を、私はこのオブジェクトかどうかをテストできるようにしたいと思いますその怠惰にロードされた子は、実際にはプログラムでは読み取り専用ですが、そのためのAPIはありません。そのようなAPIは存在しますか?

アップデート:私は、Hibernate 3.3.1

+0

ただ好奇心、これはライブコードでこれをしたいと思い、ユニットテストやあなたのためですか?なぜあなたはそれを必要としますか? – aishwarya

+0

@aishwarya、親が読み込み専用に設定されているときに、遅延読み込みエンティティがどのように動作するかを検証したい。親を読み込み専用に設定する前に、子エンティティが既に読み込まれている(遅れているかどうかにかかわらず)場合、子エンティティの動作を確認したい。私は基本的には、コードのいくつかをデバッグしている間だけ必要になります。 –

答えて

2

そのためSession.isReadOnly(Object entityOrProxy)あります使用しています。

編集:3.3.1用 醜いハック:

//usual imports 
//.... 
import org.hibernate.impl.SessionImpl; 
import org.hibernate.engine.EntityEntry; 
import org.hibernate.engine.Status; 
import org.hibernate.engine.StatefulPersistenceContext; 


Session session = (Session)entityManager.getDelegate(); 

SessionImpl sessImpl = (SessionImpl) session; 
if (((StatefulPersistenceContext) sessImpl.getPersistenceContext()).getEntry(entity).getStatus() == Status.READ_ONLY) { 
    dosomething 
}; 
+0

Ahh .. 3.5にはありますが3.3.1にはありませんが、3.5実装のコードを見てそれを使用することができます。ありがとう.. –

+0

@ChrisWilliamsああ、okは3.3.1を知らなかった。私の答えを編集、それは醜い鋳造の多くを含む。 – soulcheck

+0

私は受け入れた後に私はチェックしておくべきだった!私は3.3.1のソリューションを投稿するために戻ってきました。ありがとう! –

関連する問題