我有兩個實體,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