Невозможно удалить (сопоставить) объект моей БД с помощью POSTMAN - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть сущность с именем Player, а другая - с именем Game, у каждого игрока есть X игр, поэтому у Games есть внешний ключ для idPlayer. Я пытаюсь удалить Player со всеми его GamesTries, логически, и Spring говорит: "java. sql .SQLIntegrityConstraintViolationException: Невозможно удалить или обновить родительскую строку: сбой ограничения внешнего ключа (dices. game , CONSTRAINT FKss1l3mwkp44i09b7j2rolnyp5 FOREIGN KEY (player_id_player) ССЫЛКИ player (id_player)) ", а POSTMAN сообщает через JSON:« message »:« не удалось выполнить оператор; SQL [н / п] ; constraint [null]; вложенным исключением является org.hibernate.exception.ConstraintViolationException: не удалось выполнить оператор ".

Вот код обеих сущностей:

@Entity
@Table(name="player")
public class Player {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @JoinColumn(name = "id_player")
    private Integer idPlayer;
    private String name;
    private LocalDateTime registerDate;
    private float successRate;

    public Player() {
    }

    public Player(Integer idPlayer, String name, LocalDateTime registerDate, float successRate) {
        this.idPlayer = idPlayer;
        this.name = name;        
        this.registerDate = registerDate;
        this.successRate = successRate;
    }

//getters n setters
}
@Entity
@Table(name = "game")
public class Game {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @JoinColumn(name = "id_game")
    private Integer idGame;
    @JoinColumn(name = "id_player")
    private Integer idPlayer;
    private Integer valueDice1;
    private Integer valueDice2;
    private boolean won;

    public Game() {
    }

    public Game(Integer idGame, Integer idPlayer, Integer valueDice1, Integer valueDice2, boolean won) {
        super();
        this.idGame = idGame;
        this.idPlayer = idPlayer;
        this.valueDice1 = valueDice1;
        this.valueDice2 = valueDice2;
        this.won = won;

    }
//getters n setters
}

И затем Контроллер игрока и Служба игрока

//CONTROLLER
    @DeleteMapping("dices/players/id")
    public void deletePlayerById(@RequestBody Player player){
        playerService.deletePlayerById(player.getId());
    }

//SERVICE
    @Transactional
    public void deletePlayerById(Integer id) {
        gameRepository.deleteByIdPlayer(id);
        playerRepository.deleteById(id);
    }

Большое спасибо yall !!

1 Ответ

0 голосов
/ 12 апреля 2020

, если вы хотите, чтобы в игре был внешний ключ игрока, просто добавьте @ManyToOne RelationShip:

@Entity
@Table(name="player")
public class Player {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer idPlayer;
    private String name;
    private LocalDateTime registerDate;
    private float successRate;

    public Player() {
    }

    public Player(Integer idPlayer, String name, LocalDateTime registerDate, float successRate) {
        this.idPlayer = idPlayer;
        this.name = name;        
        this.registerDate = registerDate;
        this.successRate = successRate;
    }

//getters n setters
}

, и для игры вы можете иметь это:

@Entity
@Table(name = "game")
public class Game {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer idGame;

    @ManyToOne
    @JoinColumn(name="player_id", nullable=false)
    @OnDelete(action = OnDeleteAction.CASCADE)
    private Player player;

    private Integer valueDice1;
    private Integer valueDice2;
    private boolean won;

    public Game() {
    }

    public Game(Integer idGame, Integer idPlayer, Integer valueDice1, Integer valueDice2, boolean won) {
        super();
        this.idGame = idGame;
        this.idPlayer = idPlayer;
        this.valueDice1 = valueDice1;
        this.valueDice2 = valueDice2;
        this.won = won;

    }
//getters n setters
}

так Теперь, если вы удалите игрока, аннотация OnDelete удалит игры-сироты вместе с вашим игроком. Я не знаю, почему вы так попробовали JoinColumn. Стоит отметить, что вы также можете смоделировать это как двунаправленное и использовать возможность удаления сирот, установленную в true. Вы можете прочитать об этом подробнее здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...