我有一个实体A和B extends A,并尝试使用连接继承策略进行软删除。
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@SQLDelete("UPDATE A SET deleted = 1 WHERE id = ?")
A {
@Id long id;
boolean deleted;
}
@Entity
B extends A {}似乎Hibernate正确地将表A设置为deleted = 1,但也从表B中删除了整个条目。当然,我想保留这个条目。
对此有什么想法吗?
我使用的是Hibernate 3.5.5和基于注释的实体定义。也尝试了Hibernate 3.6.2。
发布于 2012-05-11 18:39:14
您可能希望这样创建一个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"/> 另外,别忘了在你的注释中更新你的级联。
https://stackoverflow.com/questions/5404964
复制相似问题