2011-12-07 98 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啊,好吧,不知道它是3.3.1。編輯我的答案,它包含了很多醜陋的演員。 – soulcheck

+0

我接受後應該檢查回來!我剛剛回來發佈我的解決方案3.3.1,你打敗了我。謝謝! –

相關問題