尝试使用Java将数据插入数据库时出现TransactionRequiredException
我正在尝试使用如下代码将数据插入数据库:尝试使用Java将数据插入数据库时出现TransactionRequiredException,java,postgresql,jpa,Java,Postgresql,Jpa,我正在尝试使用如下代码将数据插入数据库: Query query=em.createNativeQuery("insert into tab1 (col1, col2) values ('val1', 'val2')"); int result=query.executeUpdate(); @Resource javax.transaction.UserTransaction userTransaction; 但它抛出了TransactionRequiredException。这是什么?异常
Query query=em.createNativeQuery("insert into tab1 (col1, col2) values ('val1', 'val2')");
int result=query.executeUpdate();
@Resource
javax.transaction.UserTransaction userTransaction;
但它抛出了TransactionRequiredException。这是什么?异常是不言自明的,并且已经给出了关于堆栈溢出的多个解决方案 在执行任何插入/更新/删除操作之前,您需要启动会话(事务)。 如果您使用的是spring,则可以使用@Transactional属性,否则可以通过编程方式创建/关闭事务 请查收。
我最终发现,我的类中有一个属性如下所示:
Query query=em.createNativeQuery("insert into tab1 (col1, col2) values ('val1', 'val2')");
int result=query.executeUpdate();
@Resource
javax.transaction.UserTransaction userTransaction;
因此,正确的插入方法是:
userTransaction.begin();
Query query=em.createNativeQuery("insert into tab1 (col1, col2) values ('val1', 'val2')");
int result=query.executeUpdate();
userTransaction.commit();
我刚刚在我的方法上方插入了@Transactional(propagation=propagation.REQUIRES_NEW),但它同时强调了事务性和传播性。我还尝试用entityManager.getTransaction().begin()和entityManager.getTransaction().commit()包围我的代码但是我遇到了另一个异常:java.lang.IllegalStateException:JTA EntityManager不能使用getTransaction()。您定义了TransactionManager吗?这是什么意思。您可以直接将其与默认传播类型一起使用,如@Transactional()。您需要一个事务。。。就像例外所说的!任何JPA文档都会告诉你如何拥有一个。我还尝试用entityManager.getTransaction().begin()和entityManager.getTransaction().commit()来包围我的代码,但我遇到了另一个例外:java.lang.IllegalStateException:JTA entityManager不能使用getTransaction()既然您没有定义您的
persistence.xml
,那么您希望人们告诉您什么是JPA文档不会的呢?毕竟是您选择了使用JTA事务,所以您必须知道如何使用它们