【问题标题】:JPA - Changes are not persisted for JTA transaction typeJPA - JTA 事务类型的更改不持久
【发布时间】:2015-09-09 11:13:02
【问题描述】:

我使用的是JTA,我的persistence.xml如下

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"
             xmlns="http://java.sun.com/xml/ns/persistence">
  <persistence-unit name="test" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/testDS</jta-data-source>
    <class>test.entity.Employees</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
      <property name="eclipselink.target-server" value="OC4J"/>
      <property name="javax.persistence.target-database" value="Oracle"/>
      <property name="javax.persistence.logging.parameters" value="TRUE"/>
    </properties>
  </persistence-unit>
</persistence>

因为我使用的是 JTA,所以我没有 EntityTransaction。

Java代码sn-p

    Employees emp = new Employees();
    emp.setEmpNumber(empPOJO.getEmpNumber());
    final EntityManager em = getEntityManager();
    try {           
            em.merge(vehicleInspection);            
    } finally {
        if (em != null && em.isOpen()) {
            em.close();
        }
    }
}

但是我无法在数据库中持久化更改。是因为没有提交吗?

【问题讨论】:

  • 您是从事务方法调用它吗?还有嵌套的try/finally 是什么?
  • @M.Deinum 事务方法是什么意思?
  • 这是通过测试代码完成的。如果是这样,他们会回滚。所以你以后查询时不会看到
  • @SajithSilva 我没有使用任何测试代码。
  • 此代码需要在事务性方法中调用,它必须有@Transactional@TransactionAttributes 注释。如果这是在 EJB 中(是吗?),那么默认情况下它应该是事务性的(如果我没记错的话)。

标签: java jpa eclipselink jpa-2.0 oc4j


【解决方案1】:

启用事务后,您必须正确处理它们。 查看wikyJPA sample code 了解更多详情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-17
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多