WEB开发网
开发学院软件开发Java hibernate注解方式实现复合主键 阅读

hibernate注解方式实现复合主键

 2009-09-22 00:00:00 来源:WEB开发网   
核心提示: 作为符合主键类,要满足以下几点要求,hibernate注解方式实现复合主键(2),l 必须实现Serializable接口,l 必须有默认的public无参数的构造方法,本例中在email和name的getter方法前标注@Id,表示符合主键使用这两个属性,l 必须覆盖equals和hashCo

作为符合主键类,要满足以下几点要求。

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

上一页  1 2 

Tags:hibernate 注解 方式

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接