我想知道当在管理实体管理器的事务之外修改托管BO时,是否有可能使JPA实现抛出异常。例如:
BO someBO = new BO();
entityManager.getTransaction().begin();
entityManager.persist(someBO);
entityManager.getTransaction().commit();
someBO.setSomeField(someValue);
是否有可能的JPA实现配置导致最后一行出现异常?
我们正在从JDO 1.0迁移,否则在未明确配置的情况下会在最后一行抛出此类异常。
答案 0 :(得分:1)
当PersisteceContext
在EntityManager
模式下工作时,实体仅在事务中附加到PersistenceContextType.TRANSACTION
,或者在使用PersistenceContextType.EXTENDED
时更长。如果实体未附加到PersisteceContext
,则它不关心实体。
我可以想象,扩展模式和TransactionAttributeType.REQUIRED
的组合会表现得像这样,但是你需要一个封装someBO.setSomeField(someValue)
的图层。
要修改实体,以便修改数据库的内容,只在事务的上下文中才有意义。