是否有可能使JPA在非事务写入上抛出异常?

时间:2016-03-08 09:10:29

标签: jpa migration jdo entitymanager transactional

我想知道当在管理实体管理器的事务之外修改托管BO时,是否有可能使JPA实现抛出异常。例如:

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

someBO.setSomeField(someValue);

是否有可能的JPA实现配置导致最后一行出现异常?

我们正在从JDO 1.0迁移,否则在未明确配置的情况下会在最后一行抛出此类异常。

1 个答案:

答案 0 :(得分:1)

PersisteceContextEntityManager模式下工作时,实体仅在事务中附加到PersistenceContextType.TRANSACTION,或者在使用PersistenceContextType.EXTENDED时更长。如果实体未附加到PersisteceContext,则它不关心实体。 我可以想象,扩展模式和TransactionAttributeType.REQUIRED的组合会表现得像这样,但是你需要一个封装someBO.setSomeField(someValue)的图层。 要修改实体,以便修改数据库的内容,只在事务的上下文中才有意义。