你會想創建一個DeleteEventListener這樣:
public class SoftDeleteEventListener extends DefaultDeleteEventListener {
private static final long serialVersionUID = 1L;
@Override
public void onDelete(DeleteEvent event, Set arg1) throws HibernateException {
Object o = event.getObject();
if (o instanceof SoftDeletable) {
((SoftDeletable)o).setStatusId(1);
EntityPersister persister = event.getSession().getEntityPersister(event.getEntityName(), o);
EntityEntry entityEntry = event.getSession().getPersistenceContext().getEntry(o);
cascadeBeforeDelete(event.getSession(), persister, o, entityEntry, arg1);
cascadeAfterDelete(event.getSession(), persister, o, arg1);
} else {
super.onDelete(event, arg1);
}
}
}
鉤到你的persistence.xml這樣
<property name = "hibernate.ejb.event.delete" value = "org.something.SoftDeleteEventListener"/>
另外,不要忘記更新您的級聯註釋。
這讀起來很好,但它對我使用Hibernate 5.1並不適用。我正在嘗試同樣的事情。對我而言,最後一行仍然被刪除。 – 2017-04-09 04:11:39