在删除父项时,JPA是否可以自动取消子项? 我有一个模型类设备,附有同步统计信息。当我删除设备时,我仍然想保留统计信息,因此请将Statistics类中的现场设备设置为“空”。在Hibernate/JPA中删除对象并自动取消子项
@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批处理更新”
你不允许访问/修改等entites的生命周期中的回调方法(它在JPA规范),这就是为什么你所得到的例外。如果你对这个除了使用orphanRemoval = false之外什么都不做,会发生什么呢? – esej 2012-04-03 11:28:08
不,我仍然得到相同的错误:一个javax.persistence.PersistenceException被捕获,org.hibernate.exception.ConstraintViolationException:无法执行JDBC批量更新 – 2012-04-03 11:34:17
那么,以下似乎的作品。如果你想建议它作为答案,然后我接受它指向我的方向: @PreRemove public void testing(){ for(Statistic stat:syncStats){ stat.device = null; stat.save(); } } – 2012-04-03 13:10:08