java - 如何使用 Web 服务和 EclipseLink 作为 JPA 提供程序更新数据库?

标签 java database web-services jpa eclipselink

我使用 EclipseLink 作为 JPA 提供程序完成了一个简单的 Web 服务。我是 JPA 的初学者,所以我想知道这是否是更新数据库的常用方式,也是最纯粹和安全的方式:

EntityManager em = emf.createEntityManager();
   if(!em.getTransaction().isActive()){
       em.getTransaction().begin();
   }
   Query query = (Query)em.createNamedQuery("Person.updatePerson");
   query.setParameter("personId", person.getPersonPK().getPersonId())
        .setParameter("personName", name);
   return query.executeUpdate();

为什么我不需要在调用 em.getTransaction().begin() 之后使用 em.getTransaction().commit();query.executeUpdate() 似乎更新数据库,而不是提交调用。为什么?推荐什么?

最佳答案

您需要调用 commit() 来提交事务。执行查询不会提交。

您使用什么类型的交易? JTA 还是 RESOURCE_LOCAL?如果您正在使用 JTA,那么您必须使用 JTA 来开始提交事务。

启用日志记录以获取更多详细信息。

一般来说,在 JPA 中,更新通常是通过读取对象并使用其设置方法来完成的,而不是执行原始查询。

关于java - 如何使用 Web 服务和 EclipseLink 作为 JPA 提供程序更新数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9376983/

相关文章:

web-services - 将 Spring WebServiceTemplate 与代理一起使用

Java:如何对数组元素进行双重检查锁定?

java - 迁移到 Jersey 2.25 时替换 Jersey 1.19 中的 InjectableProvider

java - 从 Controller 到 jsp 的对象列表和 <c :forEach>

Java - Slick 2D - 将文本(或任何图形)放置在矩形(或任何形状)上

python - 具有标量值的 Django 子查询

mysql - 内部查询 case 表达式中的外部查询列

mysql - InnoDB 是否缓存不存在的键?

Java 调用 Web 服务不更新 boolean 属性

c# - WCF Windows服务权限问题