我使用 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/