`
liyiye
  • 浏览: 426896 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate中使用Annotation实现复合主键

阅读更多
定义复合主键类:Override Object的equals和hasCode方法;同时实现java.io.Serializable接口。如下:
/*
 * Created on 2007-02-05
 */
package com.snow.hib.pojos;
import java.io.Serializable;
import javax.persistence.Column;
/**
 * 定义一个复合主键
 * @author snowflower
 *
 */
public class ComplexIDObject implements Serializable {
 private static final long serialVersionUID = 1L;
    private String pkA;
    private String pkB;
 /**
  * @return Returns the pkA.
  */
    @Column(name="keyA")
 public String getPkA() {
  return pkA;
 }
 /**
  * @param pkA The pkA to set.
  */
 public void setPkA(String pkA) {
  this.pkA = pkA;
 }
 /**
  * @return Returns the pkB.
  */
 @Column(name="keyB")
 public String getPkB() {
  return pkB;
 }
 /**
  * @param pkB The pkB to set.
  */
 public void setPkB(String pkB) {
  this.pkB = pkB;
 }
 
 public int hashCode() {
  int result;
  result = pkA.hashCode();
  result = 29 * result + pkB.hashCode();
  return result;
 }
 public boolean equals(Object obj) {
  if(this == obj)return true;
  if ( !( obj instanceof ComplexIDObject ) ) return false;
  
  final ComplexIDObject o = (ComplexIDObject) obj;
  if(!pkA.equals(o.getPkA()))return false;
  if(!pkB.equals(o.getPkB()))return false;
  return true;
 } 
}
下面是对上面符合主键类的使用,需要注意的和复合主键类似:
/*
 * Created on 2007-02-05
 */
package com.snow.hib.pojos;
import java.io.Serializable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * 
 * @author snowflower
 *
 */
@Entity
@Table(name="complex_PK")
public class UseComplexIDObject implements Serializable {
 private static final long serialVersionUID = 1L;
 
    private ComplexIDObject comPk;
    
 /**
  * @return Returns the comPk.
  */
    @EmbeddedId
 public ComplexIDObject getComPk() {
  return comPk;
 }
 /**
  * @param comPk The comPk to set.
  */
 public void setComPk(ComplexIDObject comPk) {
  this.comPk = comPk;
 }  
 
 public boolean equals(Object o) {
  if ( this == o ) return true;
  if ( !( o instanceof UseComplexIDObject ) ) return false;
  final UseComplexIDObject parent = (UseComplexIDObject) o;
  if ( !comPk.equals( parent.comPk ) ) return false;
  return true;
 }
 public int hashCode() {
  return comPk.hashCode();
 }
}
下面是一段测试代码:
          UseComplexIDObject comp = new UseComplexIDObject();
          ComplexIDObject pk = new ComplexIDObject();
          pk.setPkA("0001A");
          pk.setPkB("0001B");
          comp.setComPk(pk);
          manager.saveComplexO(comp);
这样就OK了,至于Annotation已经在源文件中使用了,这里就不多说了。
分享到:
评论

相关推荐

    hibernate3 注释生成复合主键或者嵌入式主键的方法及实例.doc

    这篇文档将介绍如何使用Hibernate注解来生成复合主键或嵌入式主键。 复合主键(Composite Key)是指由两个或更多个列共同构成的唯一标识,而嵌入式主键(Embedded Key)则是将主键字段嵌入到实体类内部。在不使用...

    hibernate annotation 中文文档

    - **2.2.6 映射复合主键与外键** - 使用 `@CompositeId` 和 `@JoinColumns` 来定义复杂的主键和外键映射。 - **2.2.7 映射二级表(secondary tables)** - 有时候需要将实体Bean的部分属性映射到另外一张表上,...

    最全的Hibernate Annotation API文档

    如果需要复合主键,可以使用`@IdClass`或`@EmbeddedId`。 四、字段映射(Columns) 字段与数据库列的映射通过`@Column`注解实现,如指定列名、长度、是否可为空等: ```java @Entity public class User { @Id ...

    hibernate _annotation 注解编程

    - **复合主键映射**:使用 `@EmbeddedId` 或 `@IdClass` 来映射复合主键。 - **次级表映射**:使用 `@SecondaryTable` 注解来映射实体与次级表的关系。 - **实体缓存**:使用 `@Cacheable` 和 `@Cache(usage = ...

    hibernate annotation帮助文档

    - **从父类继承的属性**:在子类中使用 `@MapsId` 或 `@ManyToOne` 来映射继承的属性。 - **映射实体Bean的关联关系** - **一对一(One-to-one)**:使用 `@OneToOne` 注解来映射一对一的关系。 - **多对一(Many-...

    Hibernate Annotation 学习笔记

    Annotation 在 Hibernate 中扮演着关键角色,它们为数据库对象提供了元数据,使得无需XML配置就能实现数据持久化。本笔记将深入探讨Hibernate Annotation的相关知识点。 1. **实体类与@Entity** - `@Entity` 注解...

    hibernate annotaion api 中文与英文版

    - `@AssociationOverride` 和 `@AttributeOverride`: 在复合主键或嵌套实体中,覆盖默认的关联或属性映射。 **5. 事务处理和缓存** - `@Transactional`: 在服务层方法上标注,启用Spring管理的事务。 - `@Cacheable...

    hibernate-annotations-3.4.0.GA.rar

    - `@EmbeddedId`: 使用复合主键,将多个字段组合成一个主键。 - `@Embeddable`: 标记一个类为可嵌入的,这个类的实例可以作为其他类的复合主键的一部分。 10. **缓存配置** - `@Cacheable`: 开启实体的缓存支持...

    hibernate注解案例

    Hibernate 的注解学习 ExportDBAnnotation HibernateAnnotationUtils 【一对一】关系映射【一对多】关系映射 【多对多】关系映射 【composite复合主键】关系映射【component组件】关系映射

    hibernate应用包

    在“hibernate应用包”中,我们通常会发现与Hibernate框架相关的各类库和配置文件,特别是关于注解(Annotation)的使用部分。注解是Java语言的一个重要特性,它允许开发者在源代码中嵌入元数据,使得框架能够自动...

    Hibernate数据访问技术大全

    最后,书中可能还会讨论一些高级主题,如Hibernate的联合映射(Association Mapping)、继承映射(Inheritance Mapping)、复合主键(Composite Key)以及自定义类型(Custom Types)。这些特性允许开发者构建更复杂...

    Hiberate Annotation学习笔记

    - `insertable` 和 `updatable` 分别控制该字段是否在插入和更新操作中使用。 - `columnDefinition` 可以覆盖默认的 SQL DDL 定义,但可能影响数据库的移植性。 - `table` 参数用于指定字段所属的表,通常默认为...

    hibernate课程详解

    - 处理复合主键场景 #### 五、核心开发接口介绍 - **项目:hibernate_0500_CoreAPI** - `Configuration`类:配置Hibernate - `SessionFactory`类:创建`Session`实例 - `Session`类:执行CRUD操作 - `...

    EJB 注释精解(pdf版)

    复合主键是指使用多个属性变量(表中的多列)联合起来作为主键。为了实现复合主键,需要编写一个复合主键类(CompositePrimaryKeyClass),并遵循以下规则: - **复合主键类要求**: - 必须实现`Serializable`接口...

    eib3.0中的注解

    - **定义**:当需要使用多个属性变量(表中的多列)联合起来作为主键时,就需要使用复合主键。复合主键要求开发者自定义一个复合主键类。 - **示例**: ```java @Embeddable public class CompositeKey ...

    EJB中的注释.pdf

    实体Bean还可以支持复合主键,即主键由多个属性共同组成。这在某些应用场景中非常有用,例如当实体之间的关联关系较为复杂时。 总结而言,EJB中的注解为开发者提供了一种简洁的方式来管理和配置EJB组件。通过使用...

    Spring.3.x企业应用开发实战(完整版).part2

    12.2 在Spring中使用Hibernate 12.2.1 配置SessionFactory 12.2.2 使用HibernateTemplate 12.2.3 处理LOB类型数据 12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务...

    Spring3.x企业应用开发实战(完整版) part1

    12.2 在Spring中使用Hibernate 12.2.1 配置SessionFactory 12.2.2 使用HibernateTemplate 12.2.3 处理LOB类型数据 12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务...

Global site tag (gtag.js) - Google Analytics