2016-03-08 55 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)的图层。 要修改实体,以便它修改数据库的内容,只有在事务的上下文中才有意义。

相关问题