【发布时间】:2023-03-17 21:54:01
【问题描述】:
我遇到了休眠问题 我有 2 个这样的课程:
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 的唯一约束 我的问题是当我想删除我的 Race 时,使用
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:不能 执行批处理 org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154) 在 org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) 在 org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188) 在 org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1364) 在 org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1347) 在 package.DAORace.deleteRace(DAORace.java:122)
原因:java.sql.BatchUpdateException: ORA-00001: 唯一约束 (LAP_UK1) 违规
当我删除比赛并且违反了我的约束时,Hibernate 会在我的膝上进行更新。 我的问题是当我删除父级时如何正确删除子级而不更新?
注意:如果我只有一个孩子,我可以毫无例外地删除它,如果我有2个或更多孩子,我有一个例外。
感谢您的帮助!
【问题讨论】:
标签: java hibernate constraints persistence one-to-many