有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用compositeid类元素?

什么时候应该使用复合id的class元素

例如,考虑这个片段:

<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的用途是什么? 它与其他部分有什么关系


共 (1) 个答案

  1. # 1 楼答案

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

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

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

    1. 当将复合键映射为组件时,您将编写一个新类(OrderLineId),该类将包含映射的单个键部分(lineIdorderIdcustomerId)作为属性。在实体本身上映射复合键时,实体类(OrderLine)必须包含这些属性
    2. 为了使用“key as component”映射加载OrderLine,您将创建一个OrderLineId的新实例,并将其作为键传递给session.get()。使用“实体上的键”映射,您必须创建一个OrderLine实例来加载OrderLine,这充其量是令人困惑的,最糟糕的是会带来数据完整性问题