假设我有人员和地址类,他们在DB中有不同的表。
一个人可以拥有一个地址类。这对我来说很重要。一个人可以只有一个地址作为子元素,我想将它们保存在数据库的不同表中。
通常我知道我需要将它们放在同一个表中,但我的场景需要这个。
(它看起来像一对多,但我不想只为一个对象设置一个集合)
Person Address
------- -------
id id
Name PersonId
StreetName
和班级代码
Person
--------
public virtual long Id{get;set;}
public virtual Address MyAddress {get;set;}
如你所见,当我找到任何人时,我想亲自获得地址财产?但他们在不同的表格中。如何完成这种映射?
提前致谢
答案 0 :(得分:2)
您无法使用组件映射地址,因为它有自己的表。如果只有一个表中的所有字段,则可以使用它。 来自Hibernate参考:
组件元素将子对象的属性映射到父类表的列。
您应该使用一对一的关系来映射场景中的表和类。
答案 1 :(得分:1)
要在数据库中强制执行一对一,您还可以在Address表中的PersonId上添加唯一约束。
答案 2 :(得分:0)
你确定这是一对一的关系吗?我认为这是一种多对一的关系,因为通常一个人可以住在某个地址。
无论如何,如果它是多对一关系,我会像这样映射它们。在你的情况下我会做的是从地址表中删除PersonId FK并从Person表中引用地址表,这样你就有了这样的东西。
Person Address
------ -------
id id
Name StreetName
AddressId
<many-to-one name="MyAddress" class="Address" column="AddressId"/>
如果你坚持一对一的关系我会建议将两个表合并在一起。
答案 3 :(得分:0)
我在Person mapping中使用了以下代码来完成它。
<one-to-one lazy="proxy" name="MyAddress" class="Address" property-ref="PersonId" cascade="delete" />
希望帮助别人