在find()和merge()之间删除Hibernate JPA的区别

时间:2017-04-06 21:08:51

标签: java database hibernate jpa

我想问一下使用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);
}

1 个答案:

答案 0 :(得分:1)

merge()方法用于对作为参数传递的实体执行更新,在更新完成后它返回更新/合并的结果,这就是为什么你能够将它用作“查找”的原因()“方法。

find()方法仅将ID作为参数,因此无法使用此ID进行更新。

我会说merge()方法效果较差,因为它会首先执行更新然后返回结果,也许还有一些逻辑可以在执行更新之前检查实体是否脏,这可能导致附加费用。另一方面,在大多数情况下,两种方法之间不应存在巨大差异。