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

基于annotation的三种复合主键

阅读更多

方式一:

po类Teacher

package com.hibernate.demo.po;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name="teacher")
public class Teacher {
	
	private TeacherPK pk;
	
	private String title;
	private String yourWifeName;
	private Date birthDate;
	private boolean good;

	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getYourWifeName() {
		return yourWifeName;
	}
	public void setYourWifeName(String yourWifeName) {
		this.yourWifeName = yourWifeName;
	}
	@Temporal(TemporalType.TIME)
	public Date getBirthDate() {
		return birthDate;
	}
	public void setBirthDate(Date birthDate) {
		this.birthDate = birthDate;
	}
	public boolean isGood() {
		return good;
	}
	public void setGood(boolean good) {
		this.good = good;
	}
	@Id
	public TeacherPK getPk() {
		return pk;
	}
	public void setPk(TeacherPK pk) {
		this.pk = pk;
	}
}

 po 复合主键类TeacherPK

package com.hibernate.demo.po;

import java.io.Serializable;

import javax.persistence.Embeddable;

@Embeddable	
public class TeacherPK implements Serializable {
	
	private int id;
	private String name;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public boolean equals(Object obj) {
		TeacherPK pk = (TeacherPK)obj;
		if(this.id==pk.getId() && this.name.equals(pk.getName())){
			return true;
		}else{
			return false;
		}
	}

	@Override
	public int hashCode() {
		return this.name.hashCode();
	}
	
}

 测试方法:

package com.hibernate.demo.po;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class TestTeacher {
	private static SessionFactory sf = null;
	
	@BeforeClass
	public static void beforeClass(){
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
	}
	
	@Test
	public void testSave(){
		Session session = sf.openSession();
		session.beginTransaction();
		TeacherPK pk = new TeacherPK();
		pk.setId(1);
		pk.setName("nameStr");
		Teacher teacher = new Teacher();
		teacher.setPk(pk);
		teacher.setBirthDate(new Date());
		session.save(teacher);
		session.getTransaction().commit();
	}
	
	@AfterClass
	public static void afterClass(){
		sf.close();
	}
}

 方式二(比第一种配置简单):

po类Teacher

package com.hibernate.demo.po;

import java.util.Date;

import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name="teacher")
public class Teacher {
	
	private TeacherPK pk;
	
	private String title;
	private String yourWifeName;
	private Date birthDate;
	private boolean good;

	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getYourWifeName() {
		return yourWifeName;
	}
	public void setYourWifeName(String yourWifeName) {
		this.yourWifeName = yourWifeName;
	}
	@Temporal(TemporalType.TIME)
	public Date getBirthDate() {
		return birthDate;
	}
	public void setBirthDate(Date birthDate) {
		this.birthDate = birthDate;
	}
	public boolean isGood() {
		return good;
	}
	public void setGood(boolean good) {
		this.good = good;
	}
	@EmbeddedId
	public TeacherPK getPk() {
		return pk;
	}
	public void setPk(TeacherPK pk) {
		this.pk = pk;
	}
}

 复合主键类TeacherPK

package com.hibernate.demo.po;

import java.io.Serializable;

public class TeacherPK implements Serializable {
	
	private int id;
	private String name;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public boolean equals(Object obj) {
		TeacherPK pk = (TeacherPK)obj;
		if(this.id==pk.getId() && this.name.equals(pk.getName())){
			return true;
		}else{
			return false;
		}
	}

	@Override
	public int hashCode() {
		return this.name.hashCode();
	}
	
}

 测试代码不变。。。

方式三:

package com.hibernate.demo.po;

import java.util.Date;

import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name="teacher")
@IdClass(value=TeacherPK.class)
public class Teacher {
	
//	private TeacherPK pk;
	private int id;
	private String name;
	
	private String title;
	private String yourWifeName;
	private Date birthDate;
	private boolean good;
	@Id
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	@Id
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getYourWifeName() {
		return yourWifeName;
	}
	public void setYourWifeName(String yourWifeName) {
		this.yourWifeName = yourWifeName;
	}
	@Temporal(TemporalType.TIME)
	public Date getBirthDate() {
		return birthDate;
	}
	public void setBirthDate(Date birthDate) {
		this.birthDate = birthDate;
	}
	public boolean isGood() {
		return good;
	}
	public void setGood(boolean good) {
		this.good = good;
	}
//	@EmbeddedId
//	public TeacherPK getPk() {
//		return pk;
//	}
//	public void setPk(TeacherPK pk) {
//		this.pk = pk;
//	}
}

此处省略TeacherPK和测试代码。。

分享到:
评论

相关推荐

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

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

    Hiberate Annotation学习笔记

    - 当实体类的主键由多个属性组成时,可以使用 `@EmbeddedId` 注解配合一个嵌入式 ID 类来定义复合主键。 7. **关系映射** - Hibernate 注解还支持各种关系映射,如 `@OneToOne`, `@ManyToOne`, `@OneToMany`, `@...

    hibernate annotation 中文文档

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

    hibernate _annotation 注解编程

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

    hibernate annotation帮助文档

    - 使用 `@CompositeId` 和 `@JoinColumns` 来映射复合主键。 - 使用 `@JoinColumn` 注解来指定外键映射。 - **映射二级表(secondary tables)** - 使用 `@SecondaryTables` 和 `@SecondaryTable` 注解来映射多个...

    hibernate-annotations-3.4.0.GA.rar

    - `@Embeddable`: 标记一个类为可嵌入的,这个类的实例可以作为其他类的复合主键的一部分。 10. **缓存配置** - `@Cacheable`: 开启实体的缓存支持,提高数据读取速度。 - `@Cache`: 配置缓存区域和策略,如READ...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    所使用的应用服务器是jboss 5.1和weblogic 11g,详细介绍了这两种应用服务器的安装和使用,以及如何在两大主流服务器上安装、部署java ee应用。  本书内容主要包括三部分,第一部分介绍java ee开发的基础知识,...

    低清版 大型门户网站是这样炼成的.pdf

    6.3.3 基于annotation方式的事务管理配置 400 6.4 “桃园三结义”——ssh 2组合开发框架始成 404 6.4.1 spring 2.5集成orm中间件hibernate 3.2 404 6.4.2 spring 2.5集成mvc框架struts 2 411 6.4.3 ssh 2组合...

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

    7.5.1 @annotation() 7.5.2 execution() 7.5.3 args()和@args() 7.5.4 within() 7.5.5 @within()和@target() 7.5.6 target()的this() 7.6 @AspectJ进阶 7.6.1 切点复合运算 7.6.2 命名切点 7.6.3 ...

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

    7.5.1 @annotation() 7.5.2 execution() 7.5.3 args()和@args() 7.5.4 within() 7.5.5 @within()和@target() 7.5.6 target()的this() 7.6 @AspectJ进阶 7.6.1 切点复合运算 7.6.2 命名切点 7.6.3 ...

Global site tag (gtag.js) - Google Analytics