2013-08-31 48 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