Java 休眠软删除仍在删除我的记录
我试图使用Hibernate实现软删除,但由于某些原因,我的记录仍然被删除。有人介意看一下吗Java 休眠软删除仍在删除我的记录,java,hibernate,orm,hibernate-mapping,soft-delete,Java,Hibernate,Orm,Hibernate Mapping,Soft Delete,我试图使用Hibernate实现软删除,但由于某些原因,我的记录仍然被删除。有人介意看一下吗 public class SoftDeleteEventListener extends DefaultDeleteEventListener { private static final long serialVersionUID = 1L; @SuppressWarnings("rawtypes") @Override public void onDelete(DeleteEvent event
public class SoftDeleteEventListener extends DefaultDeleteEventListener {
private static final long serialVersionUID = 1L;
@SuppressWarnings("rawtypes")
@Override
public void onDelete(DeleteEvent event, Set transientEntities) throws HibernateException {
Object dbEntity = event.getObject();
if (dbEntity instanceof Entity)
{
((Entity)dbEntity).setDeleted(true);
((Entity)dbEntity).setDeletedOn(new Date());
EntityPersister persister = event.getSession().getEntityPersister( event.getEntityName(), dbEntity);
EntityEntry entityEntry = event.getSession().getPersistenceContext().getEntry(dbEntity);
cascadeBeforeDelete(event.getSession(), persister, dbEntity, entityEntry, transientEntities);
cascadeAfterDelete(event.getSession(), persister, dbEntity, transientEntities);
} else {
super.onDelete(event, transientEntities);
}
}
}
这就是我注册会话/侦听器的方式
Configuration configuration = new Configuration();
configuration.configure();
StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
sessionFactory = configuration.buildSessionFactory(ssrb.build());
EventListenerRegistry registry = ((SessionFactoryImpl)sessionFactory).getServiceRegistry().getService(
EventListenerRegistry.class);
registry.getEventListenerGroup(EventType.DELETE).appendListener(new SoftDeleteEventListener());
要解决此问题,请执行以下操作:
deleted
列
@SQLDelete(sql="UPDATE customer SET deleted = true WHERE id = ?")
if (dbEntity instanceof Entity)
{
((Entity)dbEntity).setDeleted(true);
((Entity)dbEntity).setDeletedOn(new Date());
event.getSession().mergedbEntity
} else {
super.onDelete(event, transientEntities);
}
“软删除”是什么意思?软删除是指我更新记录,将其标记为已删除,该标记在((实体)dbEntity)行中表示。setDeleted(true);((实体)dbEntity.setDeletedOn(新日期());基本上是将记录标记为已删除,而不是实际删除记录。为什么不添加一个列来标记记录是否已软删除?这就是我所做的所有将保存到数据库的对象都扩展了一个实体类,该实体类包含两个字段“已删除/已删除”,在该字段上将记录标记为已删除。我想做的是重写hibernate delete方法,这样,如果记录是Entity类型,它就应该将其标记为deletedSo,而不是删除该记录,因为所有对象都继承自一个没有指定和id字段的Entity类,由子类来实现id。您的解决方案需要我将@SQLDelete添加到所有子类中,这不是我想要做的。。。我宁愿听删除事件检查,如果对象正在扩展实体对象,如果只是更新删除的字段,那么这样的代码应该更易于维护,这也是一种方法。您可以检查实体是否实现了软可删除接口并应用逻辑。无法让它工作,尽管在我的问题中,我对代码进行了采样,您知道它有什么问题吗?但这样它不会覆盖hibernate默认删除方法