繁体   English   中英

Java,Hibernate,CascadeTypes和'垃圾收集'孤儿

[英]Java, Hibernate, CascadeTypes and 'garbage collecting' Orphans

我可以使用什么样的级联类型,哪里有Hibernate自动删除图像时没有更多的“东西”引用它? (基本上是Hibernate中的Garbagecollecting)

数据库:事物表 - 图像表,是多对一的,所以很多东西可以引用相同的图像。

实体:事物,形象

它是多对一的,所以例如5个事物与一个图像有关系。

现在,我这样做:

public void delete(Thing thing)
{
    if (countReferences(thing.getImage()) > 1)
    {
        thing.setImage(null);
    }
    getSession().delete(thing);
}

如果我没有执行countReferences,并且关系上有一个CascaseType.REMOVE,Hibernate也会尝试删除Image。 当图像仍被引用到某处时,数据库中的约束将触发,从而导致异常。

那么,简而言之,当删除引用它的最后一件事时,如何告诉hibernate删除Image?

是一个

org.hibernate.event.PreDeleteEventListener

也许是解决方案?

在深入研究Hibernate Docs之后,似乎不支持这样的功能。 虽然我想我理解为什么它不受支持。

one-to-many引用中,集合中的实体被视为由包含集合的实体拥有 (参见24.1。关于集合的注释 )。

与此相反, many-to-one参考没有这样的含义。 被引用的实体有理由不归引用实体所有。 因此,即使删除了对Image所有引用,也没有理由认为Image也应该被删除。 Image是一个完全独立的第一类实体。

因此,在您的情况下,似乎没有逃避应用程序强制删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM