java在@OneToMany之前删除子项而不更新它们
我对海伯纳特有意见 我有两门这样的课:
public Class Race {
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="race", orphanRemoval = true)
private List<Lap> laps = new ArrayList<>(0);
...
}
public Class Lap {
@ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.REFRESH)
@JoinColumn(name = "RACE_ID", nullable = false)
private Race race;
@OneToOne(mappedBy = "nextLap", fetch = FetchType.LAZY)
private Lap previousLap;
@OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "NEXT_ID")
private Lap nextLap;
...
}
在我的数据库中,我还有一个关于NEXT_ID和RACE_ID的唯一约束 我的问题是,当我想删除我的种族时
txn = session.getTransaction();
txn.begin();
race = session.merge(race);
session.remove(race);
session.flush(); //=>Exception here
txn.commit();
我得到的结果是:
javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute batch at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188) at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1364) at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1347) at package.DAORace.deleteRace(DAORace.java:122)
Caused by: java.sql.BatchUpdateException: ORA-00001: unique constraint (LAP_UK1) violated
Hibernate在我的膝盖上做一个更新,当我删除比赛,我的合同被违反。 我的问题是,当我删除父项时,如何在不更新的情况下正确删除子项
注意:如果我只有一个孩子,我可以毫无例外地删除它,如果我有两个或更多的孩子,我有一个例外
谢谢你的帮助
共 (0) 个答案