ManyToMany关系删除行

时间:2011-11-09 00:17:38

标签: hibernate many-to-many

我的情况非常奇怪。 我得到了A级和B级以及ManyToMany这样的关系:

的A.class:

@ManyToMany
    @JoinTable(name="a_b",
            joinColumns={
                @JoinColumn(name="a_id")
        }, inverseJoinColumns={
            @JoinColumn(name="b_id")
    }
    )
private List<B> blist;

B.class:

@ManyToMany
        @JoinTable(name="a_b",
                joinColumns={
                    @JoinColumn(name="b_id")
            }, inverseJoinColumns={
                @JoinColumn(name="a_id")
        }
        )
    private List<A> alist;

当我更新A类的实例时,Hibernate删除所有关系('从a_b删除a_id =?) 在我的数据库中,我没有级联类型规则。 这种情况可能是什么原因?

3 个答案:

答案 0 :(得分:0)

我唯一能想到的是你使用的是Save而不是SaveOrUpdate。是这样的吗?类注释看起来很好,还有其他一些导致问题的原因。你能发布更多信息吗?

答案 1 :(得分:0)

我认为问题在于您没有指定级联类型。默认值为CascadeType.None,因此父ID已更改的更新不会传播给子节点,因此Hibernate将删除孤立节点。我相信您需要在属性中指定以下内容:

@ManyToMany(cascade = CascadeType.ALL)    //Use whatever CascadeType fits your need

答案 2 :(得分:0)

尝试使用以下映射

<强>的A.class

@ManyToMany(targetEntity = B.class)
@JoinTable(name = "a_b",
        joinColumns = @JoinColumn(name = "a_id"),
        inverseJoinColumns = @JoinColumn(name = "b_id"))
private List<B> blist;

<强> B.class

@ManyToMany(mappedBy = "blist", targetEntity = A.class)
private List<A> alist;