Java 与hibernate合并时@OneToMany关系失败

Java 与hibernate合并时@OneToMany关系失败,java,mysql,hibernate,Java,Mysql,Hibernate,结果是:数据库中的所有StationSecondaire:正常,但我还有sp的ssList.size() 那么,为什么我要将ssList.size()次的sp对象保存在db中???可能是因为您没有首先持久化StationPrincipale,然后将该StationPrincipale对象的托管版本传递给所有StationSecondaire实例。从StationSecondaire.getStationPrincipale()中删除级联并尝试持久化;查看是否出现不同类型的错误。删除级联是否干净?

结果是:数据库中的所有
StationSecondaire
:正常,但我还有
sp
ssList.size()


那么,为什么我要将
ssList.size()
次的
sp
对象保存在db中???

可能是因为您没有首先持久化StationPrincipale,然后将该StationPrincipale对象的托管版本传递给所有StationSecondaire实例。从StationSecondaire.getStationPrincipale()中删除级联并尝试持久化;查看是否出现不同类型的错误。删除级联是否干净?在不需要的地方应用时就是这样!但我说这是一个测试,不是一个解决方案,否则我会把它作为答案发布。你必须解决这个问题,不是我。要解决这个问题,你需要先了解它。我已经尝试了CascadeType.MERGE和CascadeType.PERSIST,但是没有成功,但是有CascadeType.REFRESH,你能解释一下最后一个是什么意思吗?这似乎是我所说的解决方案-移除-级联。如果你不听,恐怕我帮不了你。祝你好运找到答案,我建议你买一本关于JPA的好书,并实际学习这些东西。
Class StationSecondaire {
//Staff
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "station_principal_id", nullable = false)
    public StationPrincipale getStationPrincipale() {
        return this.stationPrincipale;
    }
//Staff
}

Class StationPrincipale {
//Staff
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY, mappedBy = "stationPrincipale")
    public Set<StationSecondaire> getStationSecondaires() {
        return this.stationSecondaires;
    }
//Staff
}
// StationPrincipale sp
for (StationSecondaire ss: ssList) {
    ss.setStationPrincipale(sp);
}

ssDAO.mergeAll(ssList);  //calls merge() to the list