【问题标题】:JPA - Performing an UpdateJPA - 执行更新
【发布时间】:2013-01-15 16:22:28
【问题描述】:

我有以下代码:

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

【问题讨论】:

    标签: java class object jpa entity


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:
      @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();
          }
      

      【讨论】:

        猜你喜欢
        • 2012-12-23
        • 1970-01-01
        • 2011-07-03
        • 2014-03-01
        • 1970-01-01
        • 2011-05-03
        • 2020-05-09
        • 2014-03-11
        • 2017-02-05
        相关资源
        最近更新 更多