Delete和DeleteById方法在Hibernate中不起作用

时间:2019-01-23 20:36:26

标签: java hibernate

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,因此将其删除不应影响它们。我还尝试过直接在数据库中删除它,并且它可以正常工作而没有任何错误,所以那应该意味着关系还可以,对吧?

请帮助!

1 个答案:

答案 0 :(得分:0)

我无法告诉您如何配置Hibernate,但我敢打赌您没有正确处理会话。 如果您不刷新会话,则该对象可能仍在等待内存中的提交命令,直到它发生时才更改。