JPA是否可以在删除父项时自动使子项无效? 我有一个模型类设备,附有同步统计信息。当我删除设备时,我仍然想保留统计信息,因此将Statistics类中的字段设备设置为“null”。
@OneToMany (mappedBy = "device", fetch= FetchType.LAZY)
public List<Statistic> syncStats;
和
@ManyToOne (fetch= FetchType.LAZY)
public Device device;
是否有自动获取此效果的方法,还是我必须手动完成?
目前我使用:
@PreRemove
protected void removeLinkToStats() {
syncStats.clear();
}
但是这仍然给出了“a javax.persistence.PersistenceException已被捕获,org.hibernate.exception.ConstraintViolationException:无法执行JDBC批量更新”
答案 0 :(得分:0)
JPA是否可以在删除父级时自动使子项无效?
没有。使用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);
}
//....
}