2

我使用休眠 4.2。

它没有给我 OneToMany 注释的休眠变体,而只有javax.persistence.OneToMany.

所以我用它作为

public class Parent  {
      ...........
    @OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
        private Set<Child> children = new HashSet<Child>();

当我更新 Parent 时,我希望 children 集合通过级联 MERGE 更新。

session.update(parent);

但它不会更新子集合的子实体。它只发送父实体的更新语句。

那么如何更新children集合的级联子实体?

我无法使用org.hibernate.annotations.CascadeType,因为 javax.persistence.OneToMany 不支持它。

4

2 回答 2

4

如果你想使用休眠的,在字段/方法级别单独CascadeType定义,@Cascade(..)

@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY)
@Cascade({CascadeType.PERSIST, CascadeType.MERGE, CascadeType.SAVE_UPDATE}) //example
private Set<Child> children = new HashSet<Child>();
于 2014-06-11T10:33:13.567 回答
1

您是否尝试了所有而不是坚持或合并?

   @OneToMany(orphanRemoval = true, cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)

尝试一下,以防万一您想删除这个孩子,以防父亲被删除。

在我的例子中

于 2014-06-11T10:07:49.457 回答