Как я могу удалить ссылку во взаимосвязи «многие ко многим», не удаляя сущность весной?

#java #spring #spring-boot

Вопрос:

Я пытаюсь создать приложение spring, в котором вам может нравиться и не нравиться игра. У меня много разных отношений между игроком и игрой. Я сделал так, чтобы, когда игроку нравится игра, он добавлял эту связь в таблицу ссылок, и я, когда игроку не нравится игра, я хочу удалить эту связь. Я читал другие вопросы stackoverflow, в которых говорится, что нужно просто удалить из соответствующего списка. Дело в том, что только это не работает, потому что база данных нуждается в обновлении. Что-то, что я могу использовать playerRepository.delete(player) , но это удаляет ссылку И плеер, что мне не нужно. Я хочу удалить только эту ссылку.

Класс игрока:

 @ManyToMany
@JoinTable(name = "game_like", joinColumns = @JoinColumn(name = "player_id"), inverseJoinColumns = @JoinColumn(name = "game_id"))
private List<Game> games = new ArrayList<>();
 

Игровой класс:

 @ManyToMany(mappedBy = "games")
@JsonIgnore
private List<Player> players = new ArrayList<>();
 

Контроллер воспроизведения:

 @DeleteMapping(path = "api/v1/player/{id}/unlove")
public void unloveGame(@PathVariable Long id, @RequestBody Game game) {
    Player player = playerRepository.findById(id).get();
    game.removePlayer(player);
    player.removeGame(game);
    playerRepository.delete(player);

}
 

Как я могу этого достичь?

РЕДАКТИРОВАТЬ: Я также пробовал использовать playerRepository.save(player) , но это тоже не работает. Я также читал, что использование CascadeType.remove не рекомендуется для многих отношений

Комментарии:

1. определите CASCADE политику в отношении связи, и тогда вам понадобится только save или merge вместо delete

2. Вам действительно нужны многие отношения здесь? Если это успешная система, вы потенциально получите миллионы лайков в игре, которые все будут записаны в объект, когда к ним прикоснетесь, даже если вам, вероятно, вообще не нужны эти данные, вероятно, только общее количество. Я бы лично просто создал объект для присоединяемой таблицы в данном конкретном случае.

3. @Gimby итак, вы имеете в виду создать новую сущность, такую как игрок и игра, чтобы я также получил хранилище и другие материалы для нее?

4. Похоже на игру, да. Конечно, я не придавал большого значения дизайну, но мое первое интуитивное чувство заключается в том, что я, вероятно, не стал бы использовать здесь много разных; Я использую их только тогда, когда они будут функционально полезны в коде.

5. Но разве это не то же самое, за исключением того, что я могу делать больше вещей со столом?