【发布时间】:2020-04-12 11:11:02
【问题描述】:
我有一个名为 Player 的实体和另一个名为 Game 的实体,每个玩家都有 X 场比赛,所以 Games 有一个 idPlayer 的外键。
我试图用他的所有 GamesTries 从逻辑上删除一个玩家,并且 spring 说“java.sql.SQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败(dices.game,CONSTRAINT @987654323 @FOREIGN KEY (player_id_player) REFERENCES player (id_player)) ”,而 POSTMAN 通过 JSON 说:“消息”:“无法执行语句;SQL [n/a];约束 [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);
}
非常感谢你们!!
【问题讨论】: