`
elite20130514
  • 浏览: 48301 次
  • 性别: 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和测试代码。。

分享到:
评论

相关推荐

    基于annotation的aop实现

    基于Annotation的AOP实现是Spring框架的一个重要特性,它极大地简化了AOP的使用。在本篇文章中,我们将深入探讨基于Annotation的AOP实现,特别是动态代理的理念。 首先,了解什么是AOP。AOP的核心概念是“切面”...

    基于Annotation的Java单元测试框架.pdf

    Annotation是Java 5中引入的一种机制,允许开发者在代码中添加元数据,以供编译器、容器或其他对象使用。Annotation可以添加到包、构造函数、方法、变量等元素上,提供了更多的信息,以便于系统或容器配置变得更加...

    基于Annotation的s2sh整合配置实现分页功能

    基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能

    基于Annotation的Servlet配置

    然而,随着Java技术的发展,基于Annotation的Servlet配置逐渐成为主流,因为它提供了更加简洁、直观的编程模型。这篇博文"基于Annotation的Servlet配置"探讨了如何使用注解来配置Servlet,让我们深入理解这一现代Web...

    基于annotation s2sh实现零配置的CRM

    首先,让我们详细了解这三个框架在基于Annotation的应用中的作用: 1. **Struts2**:作为MVC框架的一部分,Struts2通过Action类和结果视图来处理HTTP请求。在基于Annotation的实现中,我们可以使用`@Action`和`@...

    S2SH整合基于annotation

    总的来说,"S2SH整合基于Annotation"意味着在开发Java Web应用时,通过这三个主流框架的协同工作,结合Annotation,可以实现高效、灵活且易于维护的代码结构。这种整合方式在大型项目中非常常见,因为它能够提高开发...

    基于Annotation的MVC框架SSH示例.rar

    在这个"基于Annotation的MVC框架SSH示例"中,我们将探讨如何使用注解(Annotation)来简化SSH框架的配置和实现。 1. **Spring框架**:Spring是核心容器,负责管理应用对象的生命周期和依赖注入。在传统的Spring配置...

    hibernate-主键生成方式[自动、手动]-annotation

    本文是讲解的是hibernate3.2的主键生成方式,通过annotation来实现,详细的分析了主键在hibernate的生成以及在真实项目的运用。。。。

    详解Spring基于Annotation的依赖注入实现

    技术分享:详解Spring基于Annotation的依赖注入实现

    ssh包(基于annotation)

    综上所述,"ssh包(基于annotation)"代表的是Spring、Struts2和Hibernate三个框架在使用注解进行配置的应用方式。这种方式使得代码更具有表达力,降低了配置的复杂度,同时也提高了开发的灵活性和可维护性。在学习和...

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

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

    基于annotation 的ssh整合(2)

    基于Annotation的SSH整合开发是一种更为现代和高效的开发方式。通过引入Spring的支持,配置Hibernate的SessionFactory以及集成Struts框架,我们可以实现一个灵活且易于维护的项目架构。这种整合不仅减少了XML配置的...

    详解Spring_3.0基于Annotation的依赖注入实现

    ### 详解Spring 3.0基于Annotation的依赖注入实现 #### 概述 Spring框架作为一个广泛使用的Java开发框架,提供了强大的依赖注入(Dependency Injection, DI)能力,帮助开发者轻松管理和组织复杂的Java应用。随着...

    基于annotation s2sh实现零配置的教务管理系统

    【描述】中的"基于annotation"表明系统设计者选择了一种面向切面编程(AOP)的方式,通过在代码中直接添加注解来定义对象的行为和依赖关系。这样不仅简化了配置,还提高了开发效率,因为开发者无需离开代码编辑器去...

    extjs+s2sh基于annotation的理财系统

    【标题】"extjs+s2sh基于annotation的理财系统"是一个综合性的IT项目,它结合了前端的ExtJS框架和后端的Struts2、Spring、Hibernate(S2SH)框架,并利用注解(Annotation)进行配置,构建了一个完整的理财管理系统...

    基于Annotation的Struts2.0+Hibernate3.3+Spring2.5图文教程整合开发.doc

    【基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发】 这篇文档主要介绍了一个使用注解(Annotation)进行Struts2.0、Hibernate3.3和Spring2.5整合开发的教程。这种集成方式相比传统的XML配置,可以简化...

Global site tag (gtag.js) - Google Analytics