Spring ManyToMany удаляет результаты в ConstraintViolationException - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь удалить объект Competition с помощью вызова покоя, однако я получаю сообщение об ошибке внутреннего сервера, возможно, потому что у меня есть отношение @ManyToMany с User объектами.

error: "Internal Server Error"
message: "could not execute statement; SQL [n/a]; constraint ["FK2YX8G5HN2Q4HFX6MI59O1FO0Y: PUBLIC.MATCHES FOREIGN KEY(COMPETITION_ID) REFERENCES PUBLIC.COMPETITIONS(ID) (1)"; SQL statement:↵delete from competitions where id=? [23503-197]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement"
path: "/competitions/1"
status: 500
timestamp: "2018-12-01T18:38:36.725+0000"

Это моя сущность пользователя

@ManyToMany(fetch = FetchType.LAZY, targetEntity=Competition.class, cascade =
            {
                    CascadeType.DETACH,
                    CascadeType.MERGE,
                    CascadeType.PERSIST
            })
    @JoinTable(name = "competitions_officials",
            joinColumns = {@JoinColumn(name ="official_id")},
            inverseJoinColumns = {@JoinColumn(name = "competition_id")})
    @JsonIgnore
    private List<Competition> competitions;

А это моя сущность соревнования

@ManyToMany(fetch = FetchType.LAZY, targetEntity=User.class, cascade =
            {
                    CascadeType.DETACH,
                    CascadeType.MERGE,
                    CascadeType.PERSIST
            })
    @JoinTable(name = "competitions_officials",
            joinColumns = {@JoinColumn(name ="competition_id")},
            inverseJoinColumns = {@JoinColumn(name = "official_id")})
    private List<User> officials;

А это мой контроллер соревнования

@DeleteMapping("/{id}/officials")
    public ResponseEntity<User> deleteOfficials(
            @PathVariable Long id) {
        Optional<Competition> oCompetitions = getEntity(id);
        if(oCompetitions.isPresent()){
            for (Iterator<User> userIterator = userRepository.findByCompetitionsId(id).iterator(); userIterator.hasNext();) {
                User user = userIterator.next();
                oCompetitions.get().getOfficials().remove(user);
            }
            return ResponseEntity.ok().build();
        }
        return ResponseEntity.notFound().build();
    }

Хотя я не уверен в этомявляется частью проблемы, но вот мои вставки SQL:

INSERT INTO competitions_officials (competition_id, official_id) VALUES (1, 2);
INSERT INTO competitions_officials (competition_id, official_id) VALUES (1, 3);
INSERT INTO competitions_officials (competition_id, official_id) VALUES (2, 4);
INSERT INTO competitions_officials (competition_id, official_id) VALUES (2, 5);
INSERT INTO competitions_officials (competition_id, official_id) VALUES (3, 6);
INSERT INTO competitions_officials (competition_id, official_id) VALUES (3, 2);
INSERT INTO competitions_officials (competition_id, official_id) VALUES (3, 3);
INSERT INTO competitions_officials (competition_id, official_id) VALUES (4, 6);
INSERT INTO competitions_officials (competition_id, official_id) VALUES (5, 2);
INSERT INTO competitions_officials (competition_id, official_id) VALUES (5, 4);
INSERT INTO competitions_officials (competition_id, official_id) VALUES (5, 6);

GET запросы работают нормально, а также добавление нового Competition.Только удаление проблематично.

Я перепробовал много ответов с сайта, но все еще получаю эту ошибку.Заранее спасибо за помощь.

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