Hibernate交叉引用同一类的多对多父/子映射

时间:2009-11-20 15:54:23

标签: java hibernate orm

我遇到一个主要问题,即父/子关系正在为单个类的层次结构工作。基本上我必须代表一个像这样的服务器树:

Server A
    Server B
        Server C
        Server D
    Server E
        Server C
        Server D
    Server F
    Server G

请注意服务器B& E是一样的。我的原始映射是这样的,这很好,直到我需要为服务器C& D是同一个实例,因此PARENT_ID的单个列被最后一个关系填充,只有一个服务器B或E显示子项:

<hibernate-mapping ...>
  <class name="Server" ...>
    ...
    <set name="children" cascade="all-delete-orphan" lazy="false">
      <key column="PARENT_ID" />
      <one-to-many class="Server" />
    </set>
  </class>
</hibernate-mapping>

我知道我需要做一些交叉引用表来映射服务器可以有多个父项的事实,但我在网上找到的所有示例都包含一个单独的父类和子类。

有人能告诉我如何为同一个班级进行交叉引用父/子映射......?即类似的东西:

<hibernate-mapping ...>
  <class name="Server" ...>
    ...
    <set name="children" cascade="all-delete-orphan" lazy="false">
      <key>
        <column name="PARENT_ID" />
        <column name="CHILD_ID" />
      </key>
      <many-to-many class="Server">
        <column name="???" />
        <formula>???</formula>
      </many-to-many>
    </set>
  </class>
</hibernate-mapping>

谢谢,

鲍勃。

2 个答案:

答案 0 :(得分:1)

在多对多映射中,将列名设置为CHILD_ID。

<many-to-many class="Server">
     <column name="CHILD_ID" />
</many-to-many>

这将导致关系将子id视为表示自身的id。虽然一对多关系将使用parent_id作为表示自身的id。应该工作,我没有运行它,但我之前做过类似的事情。

答案 1 :(得分:0)

执行以下操作:

...
<set name="children" table="SERVER_XREF" cascade="all-delete-orphan" lazy="false">
  <key column="PARENT_ID" />
  <many-to-many class="Server" column="CHILD_ID" />
</set>
...

似乎导致了我返回后的服务器层次结构。

干杯,