hibernate对联合主键的支持一共采取了三种方式
1,
这种方式的缺点是持久化对象的本身就是其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对象。这通常是很不方便的。
2,第二种方法是对第一个方法的改进,他采取了使用一个对象来标识该联合主键:
这种方式的缺点是代码的重复,因为相同的属性同时在MedicareId中和持久化对象中出现。MedicareId必须要重写equals() and hashCode() 方法和实现Serializable接口。这种成为映射式组合标记符
3,第三种方法是hibernate推荐的方法(标识符组件:identifier component)。
《未完待续》
附:属性的说明
• mapped (optional, defaults to false): indicates that a mapped composite
identifier is used, and that the contained property mappings refer to both
the entity class and the composite identifier class.(指明是否采用第二种方式,默认值为false)
• class (optional, but required for a mapped composite identifier): The class
used as a composite identifier.(在采用第二种方式的时候,指明对应的class名)
• name (optional, required for this approach): A property of component type
that holds the composite identifier (see chapter 9).
• access (optional - defaults to property): The strategy Hibernate should use
for accessing the property value.
• class (optional - defaults to the property type determined by reflection):
The component class used as a composite identifier (see next section).