【问题标题】:Map a composite key inside a composite key hibernate xml在组合键休眠 xml 中映射组合键
【发布时间】:2011-08-15 20:06:38
【问题描述】:

这就是我想做的,将一个对象映射到另一个具有相同主键的表。下面是一个示例,基本上我有一个具有复合键的对象,该复合键具有另一个表的复合键,但我不知道如何同时包含两者以创建正确的对象键。我突出显示了错误的行,它只包含键的属性之一。

  <class name="BusinessRuleObject" table="BUSINESS_RULE_OBJECTS" schema="DB">
    <composite-id name="businessRuleObjectId" class="BusinessRuleObjectId">
      <key-property name="sameIdCode" column="ID_CD" />
      **<key-many-to-one name="businessRule" class="BusinessRule" column="BUSINESS_RULE" />**
    </composite-id>
    <!-- ... STUFF GOES HERE -->
  </class>

  <class name="BusinessRule" table="BUSINESS_RULE_STRINGS" schema="DB">
    <composite-id name="businessRule2ID" class="BusinessRule2ID">
      <key-property name="sameIdCode" column="ID_CD" />
      <key-property name="businessRuleCode" column="BUSINESS_RULE" />
    </composite-id>
    <!-- TOTALLY DIFFERENT STUFF GOES HERE -->
   </class>

【问题讨论】:

  • 两者之间是否有主从关系?
  • 不,出于所有意图和目的,它们可能是同一个表,但非主键数据除外。

标签: java hibernate hibernate-mapping


【解决方案1】:

复合外键businessRule 仅包含一个属性,因为&lt;key-many-to-one 仅声明一列BUSINESS_RULE。它应该声明它在您的示例中引用 BUSINESS_RULEID_CD 的复合键的两列。通过将ID_CD 列添加到&lt;key-many-to-one 元素,您需要删除或重命名&lt;key-property name="sameIdCode" column="ID_CD" /&gt; 元素的列。

&lt;key-many-to-onebusinessRule 对象的关联应该像这样映射:

<composite-id name="businessRuleObjectId" class="BusinessRuleObjectId"> 

  <key-many-to-one name="businessRule" class="BusinessRule" >
     <column name="ID_CD" />
     <column name="BUSINESS_RULE" />
  </key-many-to-one>

</composite-id> 

Hibernate 参考文档
5.1.7. composite-id
Components as composite identifiers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多