首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用复合id类元素?

如何使用复合id类元素?
EN

Stack Overflow用户
提问于 2009-10-01 13:51:07
回答 1查看 733关注 0票数 0

什么时候应该使用复合-id的类元素?

例如,考虑一下这个片段:

代码语言:javascript
复制
<composite-id name="id" ***class="OrderLineId"***>
    <key-property name="lineId"/>
    <key-property name="orderId"/>
    <key-property name="customerId"/>
</composite-id>

<property name="name"/>

<many-to-one name="order" class="Order"
        insert="false" update="false">
    <column name="orderId"/>
    <column name="customerId"/>
 </many-to-one>
  ....

例如,上面OrderLineId的目的是什么?它与其他部分有什么关系?

EN

回答 1

Stack Overflow用户

发布于 2009-10-01 18:57:47

简短的答案是“你不应该”:-)

首先使用代理键通常是个好主意;此外,使用单个id而不是复合id可以使映射更加简单。也就是说,当您需要使用复合键时,会出现一些情况(比如映射遗留模式)。

上面的示例显示了如何将复合键映射为组件。这是一种比使用实体本身作为自己的键更好的方法,如果要在<composite-id>上不使用<composite-id>属性来映射它,就会发生这种情况。主要的区别是:

  1. 在将组合键映射为组件时,将编写一个新类(OrderLineId),该类将包含映射的单个键部件(lineIdorderIdcustomerId)作为属性。当将复合键映射到实体本身时,您的实体类(OrderLine)必须包含使用“键作为组件”映射加载OrderLineOrderLine顺序,您将创建OrderLineId的一个新实例,并将其作为密钥传递给session.get()。使用“键对实体”映射,您必须创建一个OrderLine实例来加载OrderLine,这在最好的情况下是令人困惑的,并且在最坏的情况下表示数据完整性问题。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1504088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档