2010-12-20 135 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