gpt4 book ai didi

java - Hibernate:用继承覆盖sql-delete

转载 作者:搜寻专家 更新时间:2023-11-01 02:32:37 25 4
gpt4 key购买 nike

我有一个实体 AB 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。

最佳答案

您想要这样创建一个 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"/> 

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

关于java - Hibernate:用继承覆盖sql-delete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5404964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com