加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 14:48:25 所属栏目:Java 来源:网络整理
导读:我正在使用JPA进行一些CRUD操作.要更新一个正确的方法吗? 通过更新查询或通过查找EntityManager的方法? 我有一个我需要更新的Employee对象.哪个是正确的方法?为方便起见,find方法很好,所以我使用了find()方法. 请指导我 解决方法 在Query API上使用execut
我正在使用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");

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读