2015-05-27 93 views
2

我在遇到新的子對象時無法讓合併級聯。 我已經有一組兒童的父對象(市)對象如何使JPA合併插入OneToMany關係的新子對象

@OneToMany(mappedBy = "parent", cascade = { CascadeType.ALL }, fetch=FetchType.LAZY) 
public Set<Street> getStreets() { 
    return streets; 
} 

和子對象(街)引用

@ManyToOne(fetch=FetchType.LAZY) 
@JoinColumn(name="City", nullable=false) 
public City getParentCity(){ 
    return parentCity; 
} 

而且我運行的日常轉儲信息父進入數據庫。一切順利,直到JPA進入一條新街。當它給我一個EntityNotFoundException。我假設這意味着數據庫中沒有任何街道已經有了新的ID。從我讀過的是因爲孩子是交易的實際所有者,但我需要它來堅持新的對象,如果它遇到這個「EntityNotFound」異常

我沒有使用自動生成的主鍵,這是數據集中已存在的一個鍵。目前,我可以訪問在父對象上使用em.merge()的微服務。

我看到有一個選項可以刪除不再存在的對象(orphanRemoval);有沒有辦法添加新的?

感謝

+0

這取決於您如何嘗試保存或合併集合和父級。正如你有雙向映射,你需要有雙向關聯,比如'parent.getChildren()。add(newChild);'和newChild.setParent(parent);' –

+0

目前我只是調用em.merge()on父對象。有沒有辦法讓實體經理自動處理這個問題?就像它和孤兒一樣嗎? – mike

+0

這個鏈接可能對你有一點幫助。 http://blog.xebia.com/2009/03/23/jpa-implementation-patterns-saving-detached-entities/ –

回答

0

我不知道這是否是這樣,但我,只有當我把Hibernate的註解上述變量屬性本身,而不是getter方法的工作原理。

0

對我來說有效的是'手動'先保存街道,然後保存城市。

+0

是這個答案嗎? – Anptk