何时应该使用composite-id的
例如,请考虑以下代码段:
<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的目的是什么? 它与其他部分有什么关系?
答案 0 :(得分:1)
简短的回答是“你不应该”: - )
首先使用代理键通常是个好主意;此外,通过使用单个id而不是复合id,可以使映射更简单。也就是说,当您需要使用复合键时,有些情况(如映射旧模式)。
上面的示例显示了如何将组合键映射为组件。这是一种比将实体本身用作自己的密钥更好的方法,如果您在class
上没有<composite-id>
属性进行映射,就会发生这种情况。主要区别是:
OrderLineId
)(lineId
,orderId
,customerId
)作为属性。在实体本身上映射复合键时,您的实体类(OrderLine
)必须包含这些属性。OrderLine
,您将创建OrderLineId
的新实例并将其作为键传递给session.get()
。使用“实体上的键”映射,您必须创建一个OrderLine
的实例来加载OrderLine
,这最多会让人感到困惑,并且最坏的时候会出现数据完整性问题。