Hibernate:使用inheritace覆盖sql-delete

我有一个实体AB extends A并尝试使用连接inheritance策略进行软删除。

 @Entity @Inheritance(strategy = InheritanceType.JOINED) @SQLDelete("UPDATE A SET deleted = 1 WHERE id = ?") A { @Id long id; boolean deleted; } @Entity B extends A {} 

似乎Hibernate正确地将表Adeleted = 1 ,但也删除了表B的整个条目。 当然,我想保留这个条目。

有什么想法吗?

我正在使用Hibernate 3.5.5和基于注释的实体定义。 尝试过Hibernate 3.6.2。

您想要创建一个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中

  

此外,不要忘记在注释中更新您的级联。