2013-08-31 93 views
1

首先,我已阅读Hibernate - One table with multiple entities?休眠 - 一个表多个实体

但是,我想映射两个实体到同一个表,但我希望他们都是实体,我可以从中选择。我的意思是:

  • 一张桌子:人(id,名字,dateOfBirth,城市,街道,邮政编码)。
  • 两个实体:人(身份证,姓名,出生日期),地址(身份证,城市, 街道,邮政编码)。

所以它是实体之间的1:1关系,但在数据库中仍然有1个表。

如果我在上面的链接中使用建议的解决方案(组件关键字),我不能直接查询地址(我可以通过Person实体访问它)。我希望能够做到

session.createCriteria(Adres.class) 

我该怎么做?

更新: 我试过实体之间的一个一对一的关联,在地址映射:

<one-to-one name="Person " class="model_mapowanie_xml.Person "/> 

,并在Person的映射:

<one-to-one name="Address" class="model_mapowanie_xml.Address "/> 

两个类都有场指的是其他一。选择记录对此很好。但是,如何使用两个实体在一个事务中添加记录? (Id是由db生成的)

Address ad = new Address(); 
ad.setProperty("Sydney"); 
Person p = new Person(); 
p.setProperty("John"); 
p.setAddress(ad); 
session.save(p); 

并且只有Person部分被保存,地址属性保持为空。

+0

使用标准的API查询的实体。 –

回答

1

您应该可以使用@Table注释。这些实体将被视为不同的实体,但将被映射到同一张桌子上。

@Entity 
@Table(name="PERSON_TABLE") 
class Person {} 


@Entity 
@Table(name"PERSON_TABLE") 
class Address {} 

编辑:

如果你想保存在一个事务中的两个实体,你要么必须使用Session或设置cascade财产级联关系上的明确的操作保存它们。当你在Person上做某事时,我想你想在Address上级联操作。如果您使用注释,请参阅CascadeType

在您的HBM它看起来像 <one-to-one name="Person" class="model_mapowanie_xml.Person" cascade="all"/>

+0

,这给了我一个主意,问题更新 –

+0

每个实体[人和地址]应该有自己的ID? – IllSc