0

我有以下代码:

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

4

2 回答 2

3

您应该自己启动并提交/回滚事务,因为容器管理的事务在您的情况下不可用。

首先,您应该从 EntityManager 询问 UserTransaction。查询后,您应该提交或回滚您的事务。

您还应该做一些体面的连接处理:在 finally 块中关闭实体管理器,以避免在代码抛出异常时发生资源泄漏。

于 2013-01-31T14:26:45.870 回答
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();
    }
于 2013-01-31T14:22:30.090 回答