【发布时间】:2011-12-01 09:51:43
【问题描述】:
当没有更多“事物”引用它时,我可以使用哪种级联类型以及在哪里让 Hibernate 自动删除该图像? (基本上是在 Hibernate 中进行垃圾收集)
Database: Thing table - Image 表,是多对一的,所以很多Thing可以引用同一张图片。
实体:事物、图像
它是多对一的,因此例如 5 件事与一张图像有关。
现在,我愿意:
public void delete(Thing thing)
{
if (countReferences(thing.getImage()) > 1)
{
thing.setImage(null);
}
getSession().delete(thing);
}
如果我不做 countReferences 事情,并且关系上有 CascaseType.REMOVE,Hibernate 也会尝试删除 Image。当仍然在某处引用图像时,数据库中的约束会触发,从而导致异常。
那么,简而言之,当最后一个引用它的事物被删除时,我如何告诉 hibernate 删除图像?
是一个
org.hibernate.event.PreDeleteEventListener
也许是一个解决方案?
【问题讨论】:
-
@OneToMany(orphanRemoval=true)不适合你吗? -
是否可以选择使用 delete-orphan 从 Image 到 Thing 进行一对多?
-
对不起,我的错 - 没有仔细阅读。因此,仅当没有
Things(多方)引用它并且您想在删除最后一个引用Image的Thing时删除它,您才想删除Image(一侧)?
标签: java hibernate orm entity-relationship garbage