在同常情况下,Hibernate建议为持久化类定义一个标识属性,用于唯一地标识某个持久化实例。
对于主键只有一个字段的情况来说,用@Id进行标识就行了,此处不多说。
问题是当标识属性对应多个字段时,该怎么办呢?
组件作为符合主键
使用组件作为复合主键,也就是使用组件作为持久化类的标识符,则该组件类必须满足以下要求:
1. 有无参的构造函数。
2. 必须实现java.io.Serializable接口。
3. 建议正确地重写equals()和hashCode()方法,也就是根据组件类的关键属性来区分组件对象。
当使用组件作为复合主键时,Hibernate无法为这种复合主键生成主键值,所以程序必须为持久化实例分配这种组件标识符(即它不像id一样指定生成的策略之后就可以自动的生成对应的值,需要我们手动的赋值给它)。
下面看一个组件类的例子:
// 1. 实现Serializable接口
public class Name implements Serializable{
private String first;
private String last;
// 2. 无参的构造函数
public Name() {
}
public Name(String first, String last) {
this.first = first;
this.last = last;
}
// 3. 重写equals()和hashCode()方法
@Override