java – 在JPA中更新实体的最佳方式是什么?

前端之家收集整理的这篇文章主要介绍了java – 在JPA中更新实体的最佳方式是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用JPA进行一些CRUD操作.要更新一个正确的方法吗?

通过更新查询或通过查找EntityManager的方法
我有一个我需要更新的Employee对象.哪个是正确的方法?为方便起见,find方法很好,所以我使用了find()方法.

请指导我

解决方法

在Query API上使用executeUpdate()更快,因为它绕过了持久化上下文.然而,旁路持久上下文会导致内存中的实例状态,DB中该记录的实际值不会同步.

请考虑以下示例:

Employee employee= (Employee)entityManager.find(Employee.class,1);
 entityManager
     .createQuery("update Employee set name = \'xxxx\' where id=1")
     .executeUpdate();

刷新后,DB中的名称将更新为新值,但内存中的员工实例仍保持原始值.您必须调用entityManager.refresh(employee)才能将更新的名称从DB重新加载到员工实例.如果您的代码仍然需要在刷新后运算符工实例,但您忘记刷新()员工实例,因为员工实例仍然包含原始值,这听起来很奇怪.

通常,在批量更新过程中使用executeUpdate(),因为它更快,因为绕过持久上下文

更新实体的正确方法是,您只需设置要通过设置器更新的属性,并让JPA在刷新期间生成更新sql,而不是手动编写.

Employee employee= (Employee)entityManager.find(Employee.class,1);
   employee.setName("Updated Name");

猜你在找的Java相关文章