Допустим, у меня есть две сущности с отношением @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<>();
Второй называется Карта :
@ManyToMany(mappedBy = "cards")
private Set<Pack> packs = new HashSet<>();
У меня есть контроллер, в котором я хочу добавить новую сущность Card к набору в Pack сущности, и затем я хочу сохранить все это в моей БД с отношениями конечно.
@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) метод, он берет все сущности Card, находящиеся в сущности Pack, и сохраняет их все в БД как новый те, даже если некоторые из них уже существуют в моей БД. Я хочу, чтобы он проверил, есть ли у сущности Pack набор сущностей карточек, он должен проверить, существует ли каждая карточка с такими идентификаторами в БД, и добавить только новые из них. Я попытался очистить набор и затем добавить только новые элементы, которые я хочу сохранить, но затем он просто удалил из БД все, что не было в состоянии пакета cuurent, и добавил только новые
Я хочу, чтобы самый лучший способ сохранить набор, связанный с @ManyToMany, чтобы он не создавал новые дубликаты в моей БД