Я пытаюсь удалить объект 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
.Только удаление проблематично.
Я перепробовал много ответов с сайта, но все еще получаю эту ошибку.Заранее спасибо за помощь.