Jpa EJB CMT:事务不回滚

Jpa EJB CMT:事务不回滚,jpa,jboss,transactions,rollback,Jpa,Jboss,Transactions,Rollback,我有以下情况: @Stateless public class ServiceSessionBean { @PersistenceContext(unitName = "unit-name") private EntityManager em; public void method() { Entity1 entity1 = new Entity1(); entity1.set... entity1.set...

我有以下情况:

@Stateless
public class ServiceSessionBean {

    @PersistenceContext(unitName = "unit-name")
    private EntityManager em;

    public void method() {

        Entity1 entity1 = new Entity1();
        entity1.set...
        entity1.set...
        em.update(entity1);

        Entity2 entity2 = new Entity2();
        entity2.set...
        entity2.set...
        em.update(entity2); //here, PSQLException is throwed.
    }
}
编辑

persistence.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

    <persistence-unit name="project" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:/jdbc/postgres</jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="none" />
            <property name="hibernate.connection.charSet" value="UTF-8" />
            <property name="hibernate.id.new_generator_mappings" value="true" />
        </properties>
    </persistence-unit>

</persistence>
standalone.xml中的数据源:

<datasource jta="false" jndi-name="java:/jdbc/postgres" pool-name="Postgres" enabled="true" use-ccm="false">
    <connection-url>jdbc:postgresql://domain:5432/database</connection-url>
    <driver-class>org.postgresql.Driver</driver-class>
    <driver>postgresql-9.2-1003.jdbc4.jar</driver>
    <security>
        <user-name>user</user-name>
        <password>pass</password>
    </security>
    <validation>
        <validate-on-match>false</validate-on-match>
        <background-validation>false</background-validation>
    </validation>
    <statement>
        <share-prepared-statements>false</share-prepared-statements>
    </statement>
</datasource>

jdbc:postgresql://domain:5432/database
org.postgresql.Driver
postgresql-9.2-1003.jdbc4.jar
用户
通过
假的
假的
假的
其他信息:

  • JBoss EAP 6.1
事务完成后,应用程序的日志显示
javax.ejb.EJBTransactionRolledbackException:transaction Rollback
,但Entity1保存在数据库中

有人能帮我吗

  • 交易问题:您的em可能不是JTA。有关详细信息,请参阅

  • 要解决您的PSQLException,请打印整个stacktrace

  • 交易问题:您的em可能不是JTA。有关详细信息,请参阅

  • 要解决您的PSQLException,请打印整个stacktrace


  • 什么是“em”?请用他的声明和初始化完成代码。@Gabriel Aramburu,已更新。我对EntityManager类非常好奇,因为您可以看到update()方法没有在JPA接口中声明。你能发布这个类的完全限定名吗?(如果可能,也可以使用update()方法代码)。如果您还发布与名为“unitname”的持久化单元相关联的数据源文件(*-ds.xml),那就太好了。加布里埃尔·阿拉姆布鲁,这是我的错误。update()方法位于抽象DAO中。它的实现只不过是
    em.merge(entity)
    。什么是“em”?请用他的声明和初始化完成代码。@Gabriel Aramburu,已更新。我对EntityManager类非常好奇,因为您可以看到update()方法没有在JPA接口中声明。你能发布这个类的完全限定名吗?(如果可能,也可以使用update()方法代码)。如果您还发布与名为“unitname”的持久化单元相关联的数据源文件(*-ds.xml),那就太好了。加布里埃尔·阿拉姆布鲁,这是我的错误。update()方法位于抽象DAO中。它的实现只不过是
    em.merge(entity)
    。Tks@Andrei I.问题解决了!standalone.xml中的数据源也没有标记为jta。Tks的技巧@Andrei I.I添加persistence.xml和完整的stacktrace。Tks@Andrei I.问题解决了!standalone.xml中的数据源也没有标记为jta。特克斯的把戏@Andrei I。
    <datasource jta="false" jndi-name="java:/jdbc/postgres" pool-name="Postgres" enabled="true" use-ccm="false">
        <connection-url>jdbc:postgresql://domain:5432/database</connection-url>
        <driver-class>org.postgresql.Driver</driver-class>
        <driver>postgresql-9.2-1003.jdbc4.jar</driver>
        <security>
            <user-name>user</user-name>
            <password>pass</password>
        </security>
        <validation>
            <validate-on-match>false</validate-on-match>
            <background-validation>false</background-validation>
        </validation>
        <statement>
            <share-prepared-statements>false</share-prepared-statements>
        </statement>
    </datasource>