Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试使用Java将数据插入数据库时出现TransactionRequiredException_Java_Postgresql_Jpa - Fatal编程技术网

尝试使用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事务,所以您必须知道如何使用它们