我有以下代码:
package testingjpa;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
public class Main
{
public static void main(String[] args)
{
EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("TestingJPAPU");
EntityManager em = emFactory.createEntityManager();
Query query = em.createQuery("UPDATE Passengers p SET p.name = 'Robert' WHERE p.id = 2");
query.executeUpdate();
em.close();
}
}
此代码的问题在于它抛出了TransactionRequiredException。实体类工作正常,因为我尝试使用其他代码,它工作得很好。我该如何解决这个问题?
答案 0 :(得分:3)
您应该自己启动并提交/回滚事务,因为容器管理的事务在您的情况下无法使用。
首先,您应该从EntityManager询问UserTransaction。在查询之后,您应该提交或回滚您的事务。
您还应该进行一些不错的连接处理:关闭finally块中的entitymanager,以避免在代码中抛出异常时出现资源泄漏。
答案 1 :(得分:1)
@Resource private UserTransaction mytx;
public static void main(String[] args)
{
EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("TestingJPAPU");
EntityManager em = emFactory.createEntityManager();
mytx.begin();
Query query = em.createQuery("UPDATE Passengers p SET p.name = 'Robert' WHERE p.id = 2");
query.executeUpdate();
mytx.commit()
em.close();
}