【问题标题】:Cannot Delete(Mapping) an object of my DB with POSTMAN无法使用 POSTMAN 删除(映射)我的数据库的对象
【发布时间】: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);
    }

非常感谢你们!!

【问题讨论】:

    标签: java spring hibernate jpa


    【解决方案1】:

    如果你想在游戏中拥有一个玩家外键,只需添加一个@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。你可以阅读更多here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      • 2012-07-18
      • 2021-07-14
      • 1970-01-01
      相关资源
      最近更新 更多