首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ManyToMany关系删除行

ManyToMany关系删除行
EN

Stack Overflow用户
提问于 2011-11-09 08:17:38
回答 3查看 127关注 0票数 0

我遇到了非常奇怪的情况。我得到A类和B类以及关系ManyToMany,如下所示:

A.class:

代码语言:javascript
复制
@ManyToMany
    @JoinTable(name="a_b",
            joinColumns={
                @JoinColumn(name="a_id")
        }, inverseJoinColumns={
            @JoinColumn(name="b_id")
    }
    )
private List<B> blist;

B.class:

代码语言:javascript
复制
@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=?),我没有得到级联类型的规则。

EN

回答 3

Stack Overflow用户

发布于 2011-11-09 08:32:48

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

票数 0
EN

Stack Overflow用户

发布于 2011-11-09 08:50:02

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

代码语言:javascript
复制
@ManyToMany(cascade = CascadeType.ALL)    //Use whatever CascadeType fits your need
票数 0
EN

Stack Overflow用户

发布于 2011-11-09 09:55:17

尝试使用以下映射

A.class

代码语言:javascript
复制
@ManyToMany(targetEntity = B.class)
@JoinTable(name = "a_b",
        joinColumns = @JoinColumn(name = "a_id"),
        inverseJoinColumns = @JoinColumn(name = "b_id"))
private List<B> blist;

B.class

代码语言:javascript
复制
@ManyToMany(mappedBy = "blist", targetEntity = A.class)
private List<A> alist;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8058888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档