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

 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).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate 中配置联合主键,可以通过使用 @IdClass 或 @EmbeddedId 注解来实现。 1. 使用 @IdClass 注解: 首先,需要创建一个用于表示联合主键的类,该类需要实现 Serializable 接口,并且需要包含所有联合主键字段。例如: ``` public class MyCompositeKey implements Serializable { private Long id1; private Long id2; // constructors, getters, setters, equals, hashCode, etc. } ``` 然后,在实体类中使用 @IdClass 注解,并指定联合主键类的名称。例如: ``` @Entity @IdClass(MyCompositeKey.class) public class MyEntity { @Id private Long id1; @Id private Long id2; // other entity fields, getters, setters, etc. } ``` 2. 使用 @EmbeddedId 注解: 首先,需要创建一个用于表示联合主键的类,该类需要实现 Serializable 接口,并且需要使用 @Embeddable 注解标记。例如: ``` @Embeddable public class MyCompositeKey implements Serializable { private Long id1; private Long id2; // constructors, getters, setters, equals, hashCode, etc. } ``` 然后,在实体类中使用 @EmbeddedId 注解,并指定联合主键类的名称。例如: ``` @Entity public class MyEntity { @EmbeddedId private MyCompositeKey id; // other entity fields, getters, setters, etc. } ``` 以上就是在 Hibernate 中配置联合主键的两种方式。需要注意的是,使用 @IdClass 注解时需要在实体类中指定所有联合主键字段,而使用 @EmbeddedId 注解时只需要在联合主键类中指定即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值