java - 在 Hibernate 中使用孤儿删除

标签 java spring hibernate one-to-many all-delete-orphan

我在 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/

相关文章:

java - 如何在 Java 中加入 google app engine 中的 2 张图像

java - 如何设置从当前日期起 1 年内的 Amazon S3 存储桶预签名 URL 过期时间

java - 如果我按 Enter 或关闭键盘,EditText 会更改大小

java - 从 google maps DistanceMatrix api 在 android 中解析 JSON

eclipse - 请帮助进行SpringSource更新

json - Spring Data Rest 不明确关联异常

java - Spring 4 表单提交

java - 标准、独立子查询、分组依据和拥有更多

java - 奇怪的 Spring 事务行为

java - 在非 Maven-Non-Spring 项目中包含 Maven-Spring-Roo-Hibernate jar 的正确步骤是什么?