JPARepository 中的我的Delete()和DeleteById()方法不起作用,我不知道为什么。 我有3个班级:车站,线路和车站线路。 StationLine只是一个将前两个绑定在一起的类,还有一些其他属性,我将在稍后的代码中使用它们。
行具有属性:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "line", cascade = CascadeType.ALL)
private List<StationLine> stations;
工作站具有属性:
@OneToMany(fetch = FetchType.LAZY, mappedBy="station", cascade=CascadeType.ALL)
private List<StationLine> stationLines;
StationLine具有以下属性:
@ManyToOne(optional=false)
private Station station;
@ManyToOne(optional=false)
private Line line;
问题出在代码的下一部分:
for(StationLine sl : stationsToRemove) {
StationLine found = stationLineRepository.findById(sl.getId()).orElse(null);
if(found == null) { throw new StationNotFoundException("Station " + sl.getStation().getName() + " not found!"); }
stationLineRepository.deleteById(found.getId());
found = stationLineRepository.findById(found.getId()).orElse(null);
if(found != null) {throw new StationNotFoundException("Station " + found.getId() + " " + found.getStation().getName() + " should be null but it is not!");}
}
如您所见,我在DeleteById()之前和之后添加了一些代码,这不是必需的,只是为了检查是否一切正常。在删除之前,它总是会找到可以的StationLine对象,但是在找到之前,如果发现它是事先删除的,那也是不好的。
Delete()的情况相同。
如果我是对的,那么根据这些关系,Station and Line应该完全独立于StationLine,因此将其删除不应影响它们。我还尝试过直接在数据库中删除它,并且它可以正常工作而没有任何错误,所以那应该意味着关系还可以,对吧?
请帮助!
答案 0 :(得分:0)
我无法告诉您如何配置Hibernate,但我敢打赌您没有正确处理会话。 如果您不刷新会话,则该对象可能仍在等待内存中的提交命令,直到它发生时才更改。