2012-03-15 54 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>