[英]How to update a collection field in entity using Spring Data JPA?
假設我有兩個實體,它們的字段之間有@ManyToMany關系。 第一個名為Pack的實體:
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
@JoinTable(name = "card_in_pack",
joinColumns = {@JoinColumn(name = "pack_id")},
inverseJoinColumns = {@JoinColumn(name = "card_id")})
private Set<Card> cards = new HashSet<>();
第二個名為Card :
@ManyToMany(mappedBy = "cards")
private Set<Pack> packs = new HashSet<>();
我有一個控制器, 我想在其中添加新的卡實體到包實體中的設置,然后我想將它全部保存到我的數據庫中。
@PostMapping("/packs/{namePack}")
public String addCard(@Valid Card card, @PathVariable String namePack, @AuthenticationPrincipal User user) {
//Assume I got a Pack instance with name pack
card.setAuthor(user);
pack.addCard(card);
packRepo.save(pack);
return "pack";
}
}
看起來每次我嘗試調用packRepo.save(pack)方法時, 它都會占用Pack實體中的所有Card實體,並將所有這些實體保存為DB作為新的實體,即使它們中的一些已存在於我的數據庫中。 我想要檢查Pack實體是否有一組卡實體,它應該檢查每個具有這種ID的卡是否已經存在於DB中,並且只添加新的卡。 我嘗試清除集合,然后只添加我想要保存的新元素,但之后它只是從DB中刪除了不在cuurent pack狀態中的所有內容並且只添加了新的元素
我得到的方式非常糟糕,我甚至不會告訴你這個)
有幫助的是 :將所有存儲庫邏輯從控制器移動到服務,並使用@transactional注釋標記它!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.