【问题标题】:Is it possible to make JPA throw an exception on a nontransactional write?是否可以让 JPA 在非事务性写入时抛出异常?
【发布时间】:2016-03-08 09:10:28
【问题描述】:

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

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

someBO.setSomeField(someValue);

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

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

【问题讨论】:

  • 没有 JPA 属性。每个实现都会有自己的特性,例如 DataNucleus JPA 所做的

标签: jpa migration jdo entitymanager transactional


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-03-10
    • 2017-03-11
    • 2018-03-17
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多