知识大全 hibernate注解实现复合主键
Posted 实体
篇首语:丈夫志四海,万里犹比邻。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 hibernate注解实现复合主键相关的知识,希望对你有一定的参考价值。
有时一个实体的主键可能同时为多个 例如同样是之前使用的 CustomerEO 实体 需要通过name和email来查找指定实体 当且仅当name和email的值完全相同时 才认为是相同的实体对象 要配置这样的复合主键 步骤如以下所示
( )编写一个复合主键的类CustomerPK 代码如下
CustomerPK java
import java io Serializable;
public class CustomerPK implements Serializable
public CustomerPK()
public CustomerPK(String name String email )
this name = name;
this email = email ;
private String email ;
public String getEmail ()
return email ;
public void setEmail (String email )
this email = email ;
private String name;
public String getName()
return name;
public void setName(String name)
this name = name;
@Override
public int hashCode()
final int PRIME = ;
int result = ;
result = PRIME * result + ((email == null ) ? : email hashCode());
result = PRIME * result + ((name == null ) ? : name hashCode());
return result;
@Override
public boolean equals(Object obj)
if (this == obj)
return true;
if (obj == null )
return false;
if (getClass() != obj getClass())
return false;
final CustomerPK other = (CustomerPK) obj;
if (email == null )
if (other email != null )
return false;
else if (!email equals(other email ))
return false;
if (name == null )
if (other name != null )
return false;
else if (!name equals(other name))
return false;
return true;
作为符合主键类 要满足以下几点要求
l 必须实现Serializable接口
l 必须有默认的public无参数的构造方法
l 必须覆蓋equals和hashCode方法 equals方法用于判断两个对象是否相同 EntityManger通过find方法来查找Entity 时 是根据equals的返回值来判断的 本例中 只有对象的name和email值完全相同时或同一个对象时则返回true 否则返回false hashCode方法返回当前对象的哈希码 生成的hashCode相同的概率越小越好 算法可以进行优化
( )通过@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 表示符合主键使用这两个属性
( )这样定义实体的复合主键后 通过以下代码便可以获得指定的实体对象
CustomerPK cpk = new CustomerPK( Janet cn );
cha138/Article/program/Java/ky/201311/28128相关参考
Hibernate复合主键映射 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  
Hibernate中配置复合主键映射 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 通常将复合主
知识大全 Hibernate(jpa)复合主键annotation声明方法
Hibernate(jpa)复合主键annotation声明方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起
Hibernate主键生成策略 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 自动增长ident
常用Hibernate主键生成策略 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 今天学习到了关
Hibernate(目前使用的版本是)中提供了多种生成主键的方式 然而当前的这么多种生成方式未必能满足我们的要求 比如increment可以在一个hibernate实例的应用上很方便的时候但是
Hibernate一对一主键关联映射 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
知识大全 Hibernate主键生成方式 Key Generator
Hibernate主键生成方式KeyGenerator 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
Hibernate(目前使用的版本是)中提供了多种生成主键的方式 然而当前的这么多种生成方式未必能满足我们的要求 比如increment可以在一个hibernate实例的应用上很方便的时候但是
知识大全 Hibernate Annotation中BLOB、CLOB注解写法
HibernateAnnotation中BLOB、CLOB注解写法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一