JPA多对一:删除一对多侧
问题描述:
我有以下关系JPA多对一:删除一对多侧
Class UserAccount{
@OneToMany(mappedBy = "firstSharedBy")
private List<Images> imagesFirstShared;
}
Class Images{
@ManyToOne
@JoinColumn
private UserAccount firstSharedBy;
}
我想删除UserAccount实例。所以我这样做。
userAccount.getImagesFirstShared().clear();
entityManager.remove(userAccount);
但它抛出了以下异常
Cannot delete or update a parent row: a foreign key constraint fails (`testdb`.`Images`, CONSTRAINT `FK201C4A25D4C117` FOREIGN KEY (`firstSharedBy_USER_NAME`) REFERENCES `USERACCOUNT` (`USER_NAME`))
任何人只要有任何线索?在此先感谢
答
如果你想,当你删除用户帐户从数据库中删除图像,需要cascade=CascadeType.ALL
属性添加到@OneToMany
注解和删除线userAccount.getImagesFirstShared().clear();
。
如果您不想删除这些图像,那么您应该对图像进行循环,将firstSharedBy
属性设置为null并保存每个Images
实体。只有这样你才能删除UserAccount
实体,因为它不会有约束连接。
不,我不想删除。所以我将不得不遍历所有的图像对象,并设置firstSharedBy null,无论UserAccount对象是我要删除的对象。是对的吗?如果不是这样不整洁和低效,特别是当我有一个非常大的图像列表? – shazinltc 2013-04-11 07:11:34
是的,但我不介意另一种方式来做到这一点。它的冬眠:] – 2013-04-11 07:56:35
Emmm ..看起来Hibernate不如我想象的那么好。 – shazinltc 2013-04-11 09:35:40