我在 Spring-Hibernate
应用程序中工作。我的问题与孤儿移除
相关,如下面的代码所述。
@Entity
public class User {
...........
@OneToMany(mappedBy = "user", orphanRemoval = true, cascade = CascadeType.ALL)
List<UserRole> userRoles = new ArrayList<>();
..........
}
考虑保存/更新用户
场景。
一种方法是从列表中删除该子对象,如 user.getUserRoles().remove(userRole)
。
另一种方法可能类似于将子列表清除为 user.getUserRoles().clear()
,然后将其添加到列表中,无论请求中出现什么用户角色。在这种情况下,请求中未出现的用户角色将通过孤立删除
删除。
哪个更好更正确?
最佳答案
嗯,这取决于情况和您使用的语义类型;见Collection performance有关不同语义及其性能调整的更多信息。
好吧,在这种情况下,您正在为一对多关联使用列表语义,因此假设列表中有 20 个元素:
选项 1:您正在一个一个地删除 15 个元素并在其中添加 1 个元素,然后 hibernate 将发出 15 个 DELETE 语句和一个 INSERT 语句。
选项 2:您清除整个列表并手动添加所有 6 个元素,这样只会发出 6 个 INSERT 语句和 1 个 DELETE 语句。
如果集合被大量修改,我将选择选项 2,请参阅 One shot delete了解更多详细信息,如果列表没有大量修改,我将选择选项 1。
关于java - 在 Hibernate 中使用孤儿删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33008755/