我想问一下使用find()和merge()方法删除有什么区别。编译后我得到了相同的结果。 User class和UserDetails是OneToOne关系中的类(父级和子级)。
使用find()
@Transactional
@Override
public void delete(User user) {
User temp = entityManager.find(User.class,user.getId());
entityManager.remove(temp.getUserDetails());
entityManager.remove(temp);
}
使用merge()
@Transactional
@Override
public void delete(User user) {
User temp = entityManager.merge(user);
entityManager.remove(temp.getUserDetails());
entityManager.remove(temp);
}
答案 0 :(得分:1)
merge()方法用于对作为参数传递的实体执行更新,在更新完成后它返回更新/合并的结果,这就是为什么你能够将它用作“查找”的原因()“方法。
find()方法仅将ID作为参数,因此无法使用此ID进行更新。
我会说merge()方法效果较差,因为它会首先执行更新然后返回结果,也许还有一些逻辑可以在执行更新之前检查实体是否脏,这可能导致附加费用。另一方面,在大多数情况下,两种方法之间不应存在巨大差异。