我正在使用JPA进行一些CRUD操作.更新对象是正确的方法吗?
通过更新查询或通过find方法EntityManager?
我有一个Employee我需要更新的对象.哪种方法正确?为了方便,find方法很好,所以我使用了这个find()方法.
请指导我.
Ken*_*han 33
使用executeUpdate()的QueryAPI是更快,因为它绕过了持续的背景下.但是,绕过持久性方面会导致内存和DB该记录的实际值实例的状态不同步.
请考虑以下示例:
Employee employee= (Employee)entityManager.find(Employee.class , 1);
entityManager
.createQuery("update Employee set name = \'xxxx\' where id=1")
.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
刷新后,DB中的名称将更新为新值,但内存中的员工实例仍保留原始值.您必须调用 entityManager.refresh(employee)将更新后的名称从DB重新加载到员工实例.如果您的代码听起来很奇怪在刷新后仍然需要操作员工实例,但是您忘记刷新()员工实例,因为员工实例仍包含原始值.
通常,executeUpdate()在批量更新过程中使用,因为它绕过持久性上下文更快
更新实体的正确方法是,您只需通过setter设置要更新的属性,并让JPA在刷新期间为您生成更新SQL,而不是手动编写.
Employee employee= (Employee)entityManager.find(Employee.class ,1);
employee.setName("Updated Name");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94332 次 |
| 最近记录: |