2013-04-11 96 views
0

我有以下关系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`)) 

任何人只要有任何线索?在此先感谢

回答

2

如果你想,当你删除用户帐户从数据库中删除图像,需要cascade=CascadeType.ALL属性添加到@OneToMany注解和删除线userAccount.getImagesFirstShared().clear();

如果您不想删除这些图像,那么您应该对图像进行循环,将firstSharedBy属性设置为null并保存每个Images实体。只有这样你才能删除UserAccount实体,因为它不会有约束连接。

+0

不,我不想删除。所以我将不得不遍历所有的图像对象,并设置firstSharedBy null,无论UserAccount对象是我要删除的对象。是对的吗?如果不是这样不整洁和低效,特别是当我有一个非常大的图像列表? – shazinltc 2013-04-11 07:11:34

+0

是的,但我不介意另一种方式来做到这一点。它的冬眠:] – 2013-04-11 07:56:35

+0

Emmm ..看起来Hibernate不如我想象的那么好。 – shazinltc 2013-04-11 09:35:40