Java、Hibernate、CascadeTypes和';垃圾收集';孤儿

Java、Hibernate、CascadeTypes和';垃圾收集';孤儿,java,hibernate,orm,entity-relationship,garbage,Java,Hibernate,Orm,Entity Relationship,Garbage,我可以使用什么样的级联类型,在没有其他“东西”指向图像时,在哪里让Hibernate自动删除图像?(基本上是在冬眠时收集垃圾) 数据库:事物表-图像表,是一个多对一的表,所以许多事物可以引用同一个图像 实体:事物、形象 它是多对一的,因此例如,5个事物与一个图像有关系 现在,我有: public void delete(Thing thing) { if (countReferences(thing.getImage()) > 1) { thing.setI

我可以使用什么样的级联类型,在没有其他“东西”指向图像时,在哪里让Hibernate自动删除图像?(基本上是在冬眠时收集垃圾)

数据库:事物表-图像表,是一个多对一的表,所以许多事物可以引用同一个图像

实体:事物、形象

它是多对一的,因此例如,5个事物与一个图像有关系

现在,我有:

public void delete(Thing thing)
{
    if (countReferences(thing.getImage()) > 1)
    {
        thing.setImage(null);
    }
    getSession().delete(thing);
}
如果我不执行countReferences操作,并且关系中存在CascaseType.REMOVE,Hibernate也会尝试删除映像。数据库中的约束在图像仍被引用到某个位置时激发,从而导致异常

那么,简而言之,当最后一个引用它的东西被删除时,我如何告诉hibernate删除它呢

是一个

org.hibernate.event.PreDeleteEventListener


也许是一个解决方案?

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

在一对多引用中,集合中的实体被视为由包含集合的实体所拥有(请参阅)

与此相反,
多对一
引用没有这样的含义。引用实体有理由不属于引用实体。因此,即使删除了对
Image
的所有引用,也没有理由认为也应该删除
Image
<代码>图像是一个完全独立的一级实体


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

OneToMany(orphanRemoving=true)对您有用吗?是否可以选择使用delete-orphan从图像到对象进行一对多删除?对不起,我的错-没有仔细阅读。因此,只有当没有
对象
s(多个方面)引用它,并且您希望在删除最后一个
对象
引用
图像时删除它,您才想删除
图像
(一侧)?