2012-03-15 61 views
0

有人可以解釋我如何映射與hibernate的一對一關聯(使用映射xml文件NOT註釋)嗎?映射與休眠的一對一關聯

這些是規則:

  • A菜單可以具有0或1區域相關聯。
  • 區域屬於菜單。 (或者,如果您更容易對其進行建模:一個區域可以有0或1個菜單關聯)。

下面是所需的表(我想使用外鍵):

TABLE MENU: 
ID 
NAME 
FKID_AREA 

TABLE AREA: 
ID 
NAME 
FKID_MENU 

謝謝!

回答

0

您應該從MENU表中刪除FKID_AREA表,因爲它不是必需的(甚至是一個問題,因爲它是AREA.FKID_MENU的重定義)。

對於剩下的,這在Hibernate documentation on bidirectional one-to-one association mappings描述:

<class name="Area"> 
    <id name="id" column="ID"> 
     <generator class="native"/> 
    </id> 
    <many-to-one name="menu" 
     column="FKID_MENU" 
     unique="true" 
     not-null="false"/> 
</class> 

<class name="Menu"> 
    <id name="id" column="ID"> 
     <generator class="native"/> 
    </id> 
    <one-to-one name="area" 
     property-ref="menu"/> 
</class> 
+0

它的工作原理類似於魅力。謝謝!。 (((現在,如果你喜歡挑戰,你可以試試這個:http://stackoverflow.com/questions/9702332/tree-modeling-with-hibernate-xml-config-files))) – webmeiker 2012-03-15 10:02:04

0

你應該從AREA表中刪除FKID_MENU。根據您的描述,您的hbm地圖將低於

<class name="Menu"> 
    <id name="id" column="ID"> 
     <generator class="native"/> 
    </id> 
    <property name="name" cloumn="name"/> 
    <many-to-one name="area" column="FKID_AREA" class="Area"/> 
</class> 

<class name="Area"> 
    <id name="id" column="ID"> 
     <generator class="native"/> 
    </id> 
    <property name="name" cloumn="name"/> 
</class>