manymany关系删除行



我遇到了非常奇怪的情况。我得到了A类和B类,关系是这样的:

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删除所有关系('delete from a_b where a_id=?在我的数据库中,我没有级联类型规则。这种情况的原因是什么?

我唯一能想到的是你正在使用Save而不是SaveOrUpdate。是这样吗?类注释看起来很好,但还有其他原因导致了这个问题。你能否提供更多信息?

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

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

尝试使用以下映射

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;

最新更新