2016-03-08 80 views
0

我想知道是否有可能使一個JPA實現拋出一個異常,當一個託管BO在管理實體管理器的事務之外被修改時。例如:是否有可能讓JPA在非事務性寫入時拋出異常?

BO someBO = new BO(); 
entityManager.getTransaction().begin(); 
entityManager.persist(someBO); 
entityManager.getTransaction().commit(); 

someBO.setSomeField(someValue); 

是否有一個JPA實現,導致異常的最後一行的一個可能的配置?

我們正在從JDO 1.0遷移,其中在沒有明確配置的情況下會在最後一行拋出異常。

+1

這沒有JPA屬性。每個實現都有自己的特性,例如DataNucleus JPA –

回答

1

的實體僅在一個事務中附連到PersisteceContext時,當它使用在PersistenceContextType.TRANSACTION模式,或更長的EntityManager作品PersistenceContextType.EXTENDED。如果實體未附加到PersisteceContext,則它不關心該實體。 我可以想象,擴展模式和TransactionAttributeType.REQUIRED的組合行爲將如此,但您需要一個封裝了someBO.setSomeField(someValue)的圖層。 要修改實體,以便它修改數據庫的內容,只有在事務的上下文中才有意義。

相關問題