我被困在我试图更新@OneToMany 映射的地步。
问题:我有 2 个实体:标准和任务。一个条件可以包含多个任务。
class Criteria {
@OneToMany(mappedBy = "criteria", cascade = { CascadeType.PERSIST,
CascadeType.MERGE, CascadeType.REFRESH }, fetch = FetchType.LAZY)
@Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE,
org.hibernate.annotations.CascadeType.ALL,
org.hibernate.annotations.CascadeType.MERGE,
org.hibernate.annotations.CascadeType.PERSIST })
private Set<Task> tasks;
}
class Task {
@ManyToOne
@JoinColumn(name = "CRITERIA_ID", nullable=false)
private Criteria criteria;
}
我正在尝试使用一组新任务更新现有标准。这需要删除所有现有任务并添加新任务。这是我的做法:
criteriaDao.persist(criteria);
Set<Task> existingTasks=criteria.getTasks();
if(existingTasks != null) {
for (Task task : existingTasks) {
task.setCriteria(null);
}
criteria.setTasks(tasks);
//more code which sets criteria for each task - this works if i try to save new criteria with new tasks
}
Hibernate 抛出异常:
Caused by: java.sql.BatchUpdateException: ORA-00001: unique constraint (CCA_DEV_5.TASK__UN) violated
抛出此异常是因为它没有删除现有任务。
如果我只删除所有任务,它可以完美运行并使用以下代码删除给定条件的所有任务:
criteriaDao.persist(criteria);
Set<Task> existingTasks=criteria.getTasks();
if(existingTasks != null) {
for (Task task : existingTasks) {
task.setCriteria(null);
}
}
在添加新任务和更多内容后,我尝试了使用合并的所有选项,但似乎对我没有任何用处。我被严重困在这里,并且肯定错过了 Hibernate 中非常基本的东西。
提前致谢。!