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 楼答案
简短的回答是“你不应该”:-)
首先使用代理密钥通常是一个好主意;此外,通过使用单个id而不是复合id,可以使映射更加简单。也就是说,在某些情况下(比如映射遗留模式),您需要使用复合键
上面的示例显示了如何将组合键映射为组件。这是一种比使用实体本身作为自己的键更好的方法,如果在
<composite-id>
上映射实体而不使用class
属性,则会发生这种情况。主要区别在于:OrderLineId
),该类将包含映射的单个键部分(lineId
、orderId
、customerId
)作为属性。在实体本身上映射复合键时,实体类(OrderLine
)必须包含这些属性李>OrderLine
,您将创建一个OrderLineId
的新实例,并将其作为键传递给session.get()
。使用“实体上的键”映射,您必须创建一个OrderLine
实例来加载OrderLine
,这充其量是令人困惑的,最糟糕的是会带来数据完整性问题李>