什么时候应该使用复合-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的目的是什么?它与其他部分有什么关系?
发布于 2009-10-01 18:57:47
简短的答案是“你不应该”:-)
首先使用代理键通常是个好主意;此外,使用单个id而不是复合id可以使映射更加简单。也就是说,当您需要使用复合键时,会出现一些情况(比如映射遗留模式)。
上面的示例显示了如何将复合键映射为组件。这是一种比使用实体本身作为自己的键更好的方法,如果要在<composite-id>上不使用<composite-id>属性来映射它,就会发生这种情况。主要的区别是:
OrderLineId),该类将包含映射的单个键部件(lineId、orderId、customerId)作为属性。当将复合键映射到实体本身时,您的实体类(OrderLine)必须包含使用“键作为组件”映射加载OrderLine的OrderLine顺序,您将创建OrderLineId的一个新实例,并将其作为密钥传递给session.get()。使用“键对实体”映射,您必须创建一个OrderLine实例来加载OrderLine,这在最好的情况下是令人困惑的,并且在最坏的情况下表示数据完整性问题。https://stackoverflow.com/questions/1504088
复制相似问题