我目前正致力于使用注释的双向OneToMany Hibernate关联。 我遇到了问题。
父实体有许多子实体。每当我更新Parent中的Child set并尝试更新Parent实体时,Child表中仍然存在旧的Child条目。所以Parent包含重复的子记录。
每当我更新Parent实体时,它的子条目也应该自动更新,没有重复,这意味着应删除现有的子实体。
我用谷歌搜索,发现有一种肮脏的方式来实现这一目标。获取Parent的现有Child实体并迭代每个子节点并使用session.delete(child)删除每个子实体。我知道这是非常糟糕的方法。
我们能否以更好的方式使用注释来实现上述目标?请帮我解决这个问题。
答案 0 :(得分:5)
使用delete-orphan级联设置。当孩子从父母身上移除后,孩子将被删除。
您必须修改已加载并存在于会话中的集合,以便删除or-orphan才能工作。这意味着集合必须是PersistentSet或其他任何东西,你删除并添加对象。
像
这样的东西Set<Product> newProducts = new HashSet<Products>();
newProducts.add(prod1);
newProducts.add(prod2);
order.setProducts(newProducts);
只会将parent_id int he products表设置为null,它不会删除它们。现在像
Set<Product> products = order.getProducts();
products.clear();
products.add(prod1);
products.add(prod2);
应删除孩子。
请记住,任何删除孤儿都可以使用,订单和产品必须加载并存在于会话中。