Hibernate 联合主键的xml配置
一共有三种方式:
1. 直接把composite-id当成entity的一部分(Embeded composite identifier)
<composite-id>
<key-property name="medicareNumber"/>
<key-property name="dependent"/>
</composite-id>
这种就是我们的key也是本身entity,我们不论查询还是其他操作,都需要先来new 一个entity,之后再去查询。
官方不推荐
2. mapped composite identifier
<composite-id class="MedicareId" mapped="true">
<key-property name="medicareNumber"/>
<key-property name="dependent"/>
</composite-id>
这种方式使用了独立的class,但是这个class是一个有其他作用entity,这样两个类都有着两个字段,需要维护。所以特点是代码冗余,所以也不推荐。
3. components as composite identifiers
<composite-id name="id" class="OrderLineId">
<key-property name="lineId"/>
<key-property name="orderId"/>
<key-property name="customerId"/>
</composite-id>
这种使用单独的一个class作为identifier,是官方推荐的方式。这个composite class必须实现java.io.Serializable接口,重写equals和hashCode方法。
Appendix:
<composite-id class="xx" name="xx">
<key-property name="xx" type="xx">
<column name="xx" not-null="true" sql-type="xx"/>
</key-property>
<key-property name="xx" type="xx">
...
</composite-id>