Hibernate的联合主键《未完待续》

<p>hibernate对联合主键的支持一共采取了三种方式</p>
<p>1,</p>
<p> <textarea cols="50" rows="15" name="code" class="xhtml"><composite-id name="propertyName" class="ClassName" mapped="true|false"
access="field|property|ClassName">
node="element-name|."
<key-property name="propertyName" type="typename"
column="column_name" />
<key-many-to-one name="propertyName class=" ClassName "
column="column_name" />
......
</composite-id></textarea></p>

<p>这种方式的缺点是持久化对象的本身就是其id。Your persistent class must override equals() and hashCode() to implement composite identifier equality. It must also implements Serializable.You must instantiate an instance of the persistent class itself and populate its identifier properties before you can load() the persistent state associated with a composite key. We call this approach an embedded composite identifier, and discourage it for serious applications.这种方式通常被称作为嵌入式联合主键,如果想要load一个persistent对象,必须先要初始化一个persistent对象。这通常是很不方便的。</p>

<p>2,第二种方法是对第一个方法的改进,他采取了使用一个对象来标识该联合主键:</p>
<p> <textarea cols="50" rows="15" name="code" class="xhtml"><composite-id class="MedicareId" mapped="true">
<key-property name="medicareNumber" />
<key-property name="dependent" />
</composite-id></textarea></p>

<p>这种方式的缺点是代码的重复,因为相同的属性同时在MedicareId中和持久化对象中出现。MedicareId必须要重写equals() and hashCode() 方法和实现Serializable接口。这种成为映射式组合标记符</p>
<p>3,第三种方法是hibernate推荐的方法(标识符组件:identifier component)。</p>


<p>《未完待续》</p>


<p>附:属性的说明</p>
<p>• mapped (optional, defaults to false): indicates that a mapped composite<br>identifier is used, and that the contained property mappings refer to both<br>the entity class and the composite identifier class.(指明是否采用第二种方式,默认值为false)<br>• class (optional, but required for a mapped composite identifier): The class<br>used as a composite identifier.(在采用第二种方式的时候,指明对应的class名)</p>
<p>• name (optional, required for this approach): A property of component type<br>that holds the composite identifier (see chapter 9).<br>• access (optional - defaults to property): The strategy Hibernate should use<br>for accessing the property value.<br>• class (optional - defaults to the property type determined by reflection):<br>The component class used as a composite identifier (see next section).</p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值