gpt4 book ai didi

java - 在 Hibernate/JPA 中删除对象并自动取消子对象

转载 作者:行者123 更新时间:2023-12-01 05:23:40 24 4
gpt4 key购买 nike

JPA 是否可以在删除父级时自动取消子级?我有一个模型类设备,附有同步统计信息。当我删除设备时,我仍然想保留统计信息,因此将统计类中的现场设备设置为“null”。

@OneToMany (mappedBy = "device", fetch= FetchType.LAZY)
public List<Statistic> syncStats;

@ManyToOne (fetch= FetchType.LAZY)
public Device device;

是否有自动获得此效果的方法或者我必须手动执行?

目前我使用:

@PreRemove
protected void removeLinkToStats() {
syncStats.clear();
}

但这仍然给出“已捕获 javax.persistence.PersistenceException,org.hibernate.exception.ConstraintViolationException:无法执行 JDBC 批量更新”

最佳答案

Is it possible with JPA to automatically nullify children when deleting the parent?

没有。对于 JPA,应用程序有责任保持同步。您的应用程序应在使用 JPA 删除实体之前调用业务逻辑。

当然有多种方法可以做到这一点。使用 PreRemove 或 PreDestroy 等注释或(我个人最喜欢的)在业务容器中执行预删除操作,该容器调用您的数据访问以从数据库中删除实体。

简短示例:

class Business
{
DataAccess dataAccess;
//.....

public void removeEntity(Entity e)
{
//do pre removal here
dataAccess.remove(e);
}
//......
}

class DataAccess
{
EntityManager em;

//......

public void remove(Entity e)
{
em.remove(e);
}

//....
}

关于java - 在 Hibernate/JPA 中删除对象并自动取消子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9991677/

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