当没有更多“事物”引用它时,我可以使用哪种级联类型以及在哪里让 Hibernate 自动删除图像?(基本上是在 Hibernate 中进行垃圾收集)
数据库:Thing table - Image 表,是多对一的,所以很多Things可以引用同一张图片。
实体:事物、图像
它是多对一的,因此例如 5 件事与一个图像有关。
现在,我这样做:
public void delete(Thing thing)
{
if (countReferences(thing.getImage()) > 1)
{
thing.setImage(null);
}
getSession().delete(thing);
}
如果我不做 countReferences 的事情,并且关系上有一个 CascaseType.REMOVE,那么 Hibernate 也会尝试删除 Image。当仍然在某处引用图像时,数据库中的约束会触发,从而导致异常。
所以,简而言之,当最后一个引用它的事物被删除时,我如何告诉休眠删除图像?
是一个
org.hibernate.event.PreDeleteEventListener
也许是一个解决方案?