有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案