知识大全 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复合主键映射

Hibernate复合主键映射  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Hibernate中配置复合主键映射

Hibernate中配置复合主键映射  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  通常将复合主

知识大全 Hibernate(jpa)复合主键annotation声明方法

Hibernate(jpa)复合主键annotation声明方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 Hibernate主键生成策略

Hibernate主键生成策略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  自动增长ident

知识大全 常用Hibernate主键生成策略

常用Hibernate主键生成策略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  今天学习到了关

知识大全 hibernate中自定义主键生成器

  Hibernate(目前使用的版本是)中提供了多种生成主键的方式  然而当前的这么多种生成方式未必能满足我们的要求  比如increment可以在一个hibernate实例的应用上很方便的时候但是

知识大全 Hibernate一对一 主键关联映射

Hibernate一对一主键关联映射  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 Hibernate主键生成方式 Key Generator

Hibernate主键生成方式KeyGenerator  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 hibernate中自定义主键生成器[1]

  Hibernate(目前使用的版本是)中提供了多种生成主键的方式  然而当前的这么多种生成方式未必能满足我们的要求  比如increment可以在一个hibernate实例的应用上很方便的时候但是

知识大全 Hibernate Annotation中BLOB、CLOB注解写法

HibernateAnnotation中BLOB、CLOB注解写法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一