JPA - 执行更新

时间:2013-01-31 14:19:39

标签: java class object jpa entity

我有以下代码:

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。实体类工作正常,因为我尝试使用其他代码,它工作得很好。我该如何解决这个问题?

2 个答案:

答案 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();
    }