#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. Но разве это не то же самое, за исключением того, что я могу делать больше вещей со столом?