2013-04-11 114 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