我正在使用 JPA 进行一些 CRUD 操作。更新对象的正确方法是什么?
通过更新查询还是通过EntityManager
的find
方法?
我有一个 Employee
对象需要更新。哪个是正确的方法?
请指导我。
最佳答案
在 Query
API 上使用 executeUpdate()
速度更快,因为它绕过了持久上下文。但是,绕过持久上下文会导致内存中实例的状态并且数据库中该记录的实际值不同步。
考虑以下示例:
Employee employee= (Employee)entityManager.find(Employee.class , 1);
entityManager
.createQuery("update Employee set name = \'xxxx\' where id=1")
.executeUpdate();
刷新后,数据库中的名称更新为新值,但内存中的员工实例仍保持原始值。您必须调用 entityManager.refresh(employee)
重新加载将名称从数据库更新为员工实例。如果您的代码在刷新后仍必须运算符(operator)工实例,但您忘记刷新()员工实例,因为员工实例仍包含原始值,这听起来很奇怪。
通常,executeUpdate()
用于批量更新过程,因为它绕过了持久上下文,速度更快
更新实体的正确方式是通过setter设置你想要更新的属性,让JPA在刷新时为你生成更新SQL,而不是手动编写。
Employee employee= (Employee)entityManager.find(Employee.class ,1);
employee.setName("Updated Name");
关于java - 在 JPA 中更新实体的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307578/