【问题标题】:Workarounds for Hibernate's lack of delete-orphan support for one-to-one and many-to-one relationships?Hibernate 缺乏对一对一和多对一关系的删除孤儿支持的解决方法?
【发布时间】:2010-10-29 02:58:00
【问题描述】:

Hibernate 不支持一对一或多对一关系的“删除-孤儿”级联。我最近发现了这一点,这让我很头疼。我的模型中有几个类,它们的设计使孩子在父母之外没有现实世界的意义。我只有一个用于父类的 DAO,而没有用于子类的单独 DAO。

这行得通:

parent.getChild().setProperty("something");
parentDao.save(parent);

这没有任何作用:

parent.setChild(null);
parentDao.save(parent);

这是非常不幸的,因为现在我必须重新考虑我的 DAO 层和我的服务层的一些操作。

有没有人以优雅的方式解决这个限制?我真的很想只关心持久的父对象。在这种特殊情况下,除了让 Hibernate 高兴之外,没有理由处理子持久性,并且仅在删除子的情况下。

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    这似乎是他们可能解决的框架中的一个缺陷,希望很快

    http://opensource.atlassian.com/projects/hibernate/browse/HHH-2608

    那张票是 2007 年开的,最近一篇抱怨这个问题的帖子是一个月前的。

    我正在做的是在我的对象上放置一个名为 isMarkedForDeletion 的属性。如果返回 true,我让我的 dao 或我的服务进行显式删除。它肯定不如 delete-orphan 好,但它在 spring+hibernate 框架中运行良好。

    我会密切关注这篇文章,因为这是一个非常重要的问题。

    【讨论】:

    【解决方案2】:

    这里描述的解决方法https://forum.hibernate.org/viewtopic.php?p=2379216 对我有用。它使用@OneToMany 关联与“多”端的单个元素来实现@OneToOne 关联并解决remove-orphans 问题。

    【讨论】:

      【解决方案3】:

      Heureka,在 Hibernate 4.27 中修复 https://hibernate.atlassian.net/browse/HHH-6484 (未测试)

      【讨论】:

        【解决方案4】:

        在子表的更新触发器上写入数据库。如果父键为空,则从子键中删除记录

        【讨论】:

        • 你能在答案中添加更多内容吗
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-15
        • 2021-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多