1 Вопрос: Как обновить поле коллекции в сущности, используя Spring Data JPA?

вопрос создан в Thu, May 2, 2019 12:00 AM

Допустим, у меня есть две сущности с отношением @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<>();

У меня есть контроллер, в котором я хочу добавить сущность новая карта в набор в сущности 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, чтобы он не создавал новые дубликаты в моей БД

    
0
1 ответ                              1                         

То, как я получил пакет, было действительно плохо, я даже не покажу вам это)

Что помогло, так это : переместите всю логику своего репозитория с контроллеров на сервисы и пометьте ее аннотацией @transactional!

    
0
2019-05-07 21: 35: 36Z
источник размещен Вот