我正在使用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");