hibernate注解方式实现复合主键
2009-09-22 00:00:00 来源:WEB开发网作为符合主键类,要满足以下几点要求。
l 必须实现Serializable接口。
l 必须有默认的public无参数的构造方法。
l 必须覆盖equals和hashCode方法。equals方法用于判断两个对象是否相同,EntityManger通过find方法来查找Entity 时,是根据equals的返回值来判断的。本例中,只有对象的name和email值完全相同时或同一个对象时则返回true,否则返回false。 hashCode方法返回当前对象的哈希码,生成的hashCode相同的概率越小越好,算法可以进行优化。
(2)通过@IdClass注释在实体中标注复合主键,实体代码如下。
@Entity
@Table(name = "customer")
@IdClass(CustomerPK.class)
public class CustomerEO implements java.io.Serializable {
private Integer id;
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
private String name;
@Id
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
private String email;
@Id
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
标注复合主键时需要注意以下几个问题。
l @IdClass标注用于标注实体所使用主键规则的类。它的定义如下所示。
@Target({TYPE}) @Retention(RUNTIME)
public @interface IdClass {
Class value();
}
属性Class表示符合主键所使用的类,本例中使用CustomerPK这个复合主键类。
l 在实体中同时标注主键的属性。本例中在email和name的getter方法前标注@Id,表示符合主键使用这两个属性。
(3)这样定义实体的复合主键后,通过以下代码便可以获得指定的实体对象:
CustomerPK cpk = new CustomerPK("Janet","janetvsfei@yahoo.com.cn");
CustomerEO instance = entityManager.find(CustomerEO.class, cpk);
- ››Hibernate高级应用:性能优化策略
- ››hibernate 多对多关系详解(包括中间表,一对多字表...
- ››Hibernate实现mysql数据库limit查询方法
- ››Hibernate 之父:是时候升级到Java EE 6了
- ››Hibernate查询
- ››Hibernate和iBATIS比较(摘自网络)
- ››Hibernate使用Projections进行聚合操作
- ››hibernate中java.util.Date类型映射
- ››hibernate中update与saveOrUpdate的区别
- ››Hibernate各种映射关系总结
- ››Hibernate过滤器使用窍门
- ››Hibernate属性查询简单讲述
更多精彩
赞助商链接