java怎么删除未命名的外键_java – JPA:删除时的外键约束

我有以下关系

Class UserAccount{

//Other fields

@OneToMany(mappedBy = "userAccount", cascade = CascadeType.REMOVE)

private Set imagesShared;

@ManyToMany

@JoinTable(name = "USER_LIKES", joinColumns = @JoinColumn(name = "USER_NAME"), inverseJoinColumns = @JoinColumn(name = "ID"))

private Set imagesLiked;

}

Class Images{

//other fields

@ManyToMany(mappedBy = "imagesLiked")

private Set 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执行的删除操作与我的操作之间有什么区别?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值