我有两个实体,Offre
和OffreCompetence
和跟随它们之间的关系:更新与另一个实体关系的实体春天
@OneToMany(mappedBy="offre",cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Collection<OffreCompetence> offreCompetences;
所以每个Offre
实体有很多OffreCompetence
实体。
假设我有一个“Offre”如下:
{
"codeOffre": 144,
"titre": "Testable 999",
"offreCompetences": [
{
"codeOffreCompetence": 93,
"niveauRequis": "77",
"competence": {
"codeCompetence": 17,
"titre": "Administrateur Mainframe IBM",
"activated": true
}
},
{
"codeOffreCompetence": 94,
"niveauRequis": "88",
"competence": {
"codeCompetence": 18,
"titre": "Administrateur Autres Systèmes",
"activated": true
}
},
{
"codeOffreCompetence": 95,
"niveauRequis": "99",
"competence": {
"codeCompetence": 19,
"titre": "Concepteur UML, Merise, ...",
"activated": true
}
},
{
"codeOffreCompetence": 96,
"niveauRequis": "88",
"competence": {
"codeCompetence": 18,
"titre": "Administrateur Autres Systèmes",
"activated": true
}
},
{
"codeOffreCompetence": 97,
"niveauRequis": "99",
"competence": {
"codeCompetence": 17,
"titre": "Administrateur Mainframe IBM",
"activated": true
}
}
],
"ville": {
"codeVille": 2
},
"typeContrat": {
"codeTypeContrat": 3
}
}
然后我想更新这个Offre
,所以我称之为put方法这需要一个“Offre”作为PARAM,则此方法将调用业务代码来更新这个“Offre”,这是更新这个实体的方法:
public Offre updateOffre(Offre offre) {
for(OffreCompetence offreCompetence : offre.getOffreCompetences()) {
offreCompetence.setOffre(offre);
}
return offreRepository.saveAndFlush(offre);
}
所以我会送这个新的JSON,我删除了一些“OffreCompetence”关系,我添加了一个新的:
{
"codeOffre": 144,
"titre": "Testable 999",
"offreCompetences": [
{
"codeOffreCompetence": 96,
"niveauRequis": "88",
"competence": {
"codeCompetence": 18
}
},
{
"niveauRequis": "5",
"competence": {
"codeCompetence": 17
}
}
],
"ville": {
"codeVille": 2
},
"typeContrat": {
"codeTypeContrat": 3
}
}
这里的问题是,它将这两个关系作为新关系添加到旧关系中,因为您可以看到我删除了一个并更新了一个并删除了一个,所以更新的Offre
应该只包含关系I'已发送。
我在设置新关系之前想过使用服务方法删除旧关系,该方法搜索与Offre
的所有关系并删除它们,然后添加我用Offre
对象发送的关系,但是我希望这自动完成。
有什么建议吗?
非常感谢。
编辑:
似乎增加了新的关系和更新他们的工作,但删除它不工作。
你试过hibernate merge吗? – kukkuz