【问题标题】:One to One delete on cascade级联一对一删除
【发布时间】:2012-02-02 17:07:57
【问题描述】:

我有 2 个类:条目和内容。

public class Entry implements Serializable {
     @OneToOne(cascade=CascadeType.ALL)
     private Content content;
}

并且内容有他的值(名称等等等)......我想要做的是如果一个内容被删除我想删除任何与之相关的条目......

这不是典型的孤儿问题(我没有删除条目!我正在删除内容)

条目可以有或没有与...相关的内容,并且内容existenc独立于条目...

我怎么能说休眠“嘿......如果你要删除一个内容找到任何相关的 FK 并删除它!”

【问题讨论】:

    标签: hibernate jpa one-to-one


    【解决方案1】:

    为什么不创建一个从内容到条目的链接,如下所示:

    public class Content implements Seralizable {
        @OneToOne(cascade=CascadeType.REMOVE, optional=true)
        private Entry entry;
    }
    

    请注意可选属性。这表示内容可能没有您在帖子中所说的与之相关的条目。

    【讨论】:

    • 我在和一位同事谈论这件事,他也这么说!这不是一个坏主意,但如果我这样做,我必须在我的内容表中创建一个 FK,指向一个条目???我认为这是不正确的(或者可能是但我看错了)但我不想在我的表中添加 FK(感觉不对)!如果我不需要在我的内容表中添加 FK 并且它会“神奇地”工作,那么......上帝保佑你!
    【解决方案2】:

    使关联双向,并级联删除:

    public class Content {
        ...
        @OneToOne(mappedBy = "content", cascade = CascadeType.REMOVE)
        private Entry entry;
    
    }
    

    【讨论】:

    • 我在和一位同事谈论这件事,他也这么说!这不是一个坏主意,但如果我这样做,我必须在我的内容表中创建一个 FK,指向一个条目???我认为这是不正确的(或者可能是但我看错了)但我不想在我的表中添加 FK(感觉不对)!如果我不需要在我的内容表中添加 FK 并且它会“神奇地”工作,那么......上帝保佑你!
    • mappedBy = "content" 表示:关联由关联的另一端映射,使用入口表中的外键。您不需要任何额外的外键。阅读 hibernate 参考手册,因为您必须了解在使用 Hibernate 时关联是如何工作的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 2010-09-12
    • 1970-01-01
    • 2016-05-03
    • 2016-11-09
    • 1970-01-01
    相关资源
    最近更新 更多