2010-12-20 136 views
0

我們還沒有使用JPA或任何其他ORM工具在我們的Web應用程序,現在我們一直在更新整個東西的Java EE 6,
我約的問題是JPA ,我一直在尋找一個答案,並瞭解人們如何解決這有點兒發行, 我有2個entites的,
JPA 2,JSF,OneToOne的設置值ID映射的實體問題

 

@Entity Person 
{ 
@Id 
private long id; 

@JoinColumn(name="CITY_ID") 
@OneToOne(fetch=FetchType.LAZY) 
private City city; 
.... 
} 

 

和我的第二個實體

 

@Entity City 
{ 
@Id 
private long id; 
private String name; 
..... 
} 

我正在查詢個人實體與我表明我的一個JSF頁面上

我有Person.city 2個輸入字段顯示在我的JSF頁面 inputhidden的ID和對inputText的名字 人們從彈出選擇城市,然後 我設置隱藏組件的城市id,新的選定的新值, 和相同的名稱, everthing一直到現在, 當我合併人員實體,它試圖合併城市也,但與已定義的ID表,因此Cirty Id的約束錯誤。

你在做什麼這個有點問題?

我認爲valueChange action爲inputHidden,但在jsf生命週期它發生在更新模型之前,所以即使我替換Person.City實體與新的動作, 它會再次更新(實際上具有相同的值,但它會做兩次) ,那麼這種情況最好的解決方法是什麼?

thanx

回答

0

您正試圖保存一個新人並將其分配到現有城市?如果是這樣,並且如果您使用的是PersistantManager.persist(person),則會嘗試創建一個失敗的新城市。你可以告訴從Person到City的關係有什麼選擇,請參閱Cascading(MERGE在你的情況下我猜)。

+0

無不是新的,我經營的管理實體,但ofcourse它mustnt刪除城市,當我刪除的人,讓我檢查級聯 – Lidovic 2010-12-20 15:40:46

+0

這不是關於級聯,在jsf生命週期中必須有從ID到實體的轉換 – Lidovic 2010-12-21 08:25:02

+0

我不知道JSF。對不起 – bert 2010-12-21 09:17:45