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”?请用他的声明和初始化完成代码。@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>