я следующее соотношениеJPA: ограничение внешнего ключа при удалении
Class UserAccount{
//Other fields
@OneToMany(mappedBy = "userAccount", cascade = CascadeType.REMOVE)
private Set<Images> imagesShared;
@ManyToMany
@JoinTable(name = "USER_LIKES", joinColumns = @JoinColumn(name = "USER_NAME"), inverseJoinColumns = @JoinColumn(name = "ID"))
private Set<Images> imagesLiked;
}
Class Images{
//other fields
@ManyToMany(mappedBy = "imagesLiked")
private Set<UserAccount> likes;
}
я получаю исключение после этих строк
Hibernate: delete from IMAGES where ID=?
Hibernate: delete from COMMENTS where COMMENT_ID=?
Hibernate: delete from COMMENTS where COMMENT_ID=?
Hibernate: delete from COMMENTS where COMMENT_ID=?
Hibernate: delete from COMMENTS where COMMENT_ID=?
Hibernate: delete from COMMENTS where COMMENT_ID=?
Hibernate: delete from IMAGES where ID=?
Исключение:
Cannot delete or update a parent row: a foreign key constraint fails (`testdb`.`USER_LIKES`, CONSTRAINT `FKC6704E28B4E3D8B` FOREIGN KEY (`ID`) REFERENCES `IMAGES` (`ID`))
В моем понимании это происходит когда JPA пытается удалить imagesShared
. Я попытался сделать это:
for (Images image : userAccount.getImagesShared()){
image.setLikes(null);
}
em.remove(account);
Но ту же ошибку. Кто угодно?
UPDATE
Когда я добавляю эту линию он работает отлично.
for (Images image : userAccount.getImagesShared()){
image.setLikes(null);
}
userAccount.getImagesShared().clear();
em.remove(account);
Но в чем разница между операцией удаления, которую выполняет JPA, и чем я занимаюсь?
Попробуйте опорожнение коллекции вместо того, чтобы его недействительным в цикле: image.getLikes() пустой() – dcernahoschi
Да, я пробовал, но не делает. help – shazinltc