`

Hibernate学习之--------联合主键的注解使用

阅读更多

 联合主键的注解使用:
 1.使用@Id来申明主键,同时将该主键的类用@Embeddable设置
      如:

//联合主键对象类
		/*
		 * 注意在hashcode和equals方法的作用,在系统中所有相同的hashcode值得对象都存到一个数组中,
		 * 这个数组的么一个元素都是一个队列,然后当我们需哟啊找到每个对象时,就查找该对象的hashcode进而找出该对象的
		 * 在数组中的位置,然后再取出队列遍历用每个对象的equals方法判断该对象是否与查找的对象相等,知直到找到相等的
		 * 对象,否则将会出现空指针异常
		 */
		@Embeddable
		public class TeacherPK implements Serializable {
		
			private int id;
			
			private String name;
		
			public String getName() {
				return name;
			}
		
			public void setName(String name) {
				this.name = name;
			}
		
			public int getId() {
				return id;
			}
		
			public void setId(int id) {
				this.id = id;
			}
		
			@Override
			public boolean equals(Object obj) {
				if(obj instanceof TeacherPK){
					TeacherPK pk = (TeacherPK) obj;
					if(this.id == pk.getId()&&this.name.equals(pk.getName())){
						return true;
					}
				}
				return false;
			}
			
			@Override
			public int hashCode() {
				return this.name.hashCode();
			}
		}
		
		public class Teacher {
			
			private TeacherPK pk;
			
			@Id
			public TeacherPK getPk() {
				return pk;
			}
		
			public void setPk(TeacherPK pk) {
				this.pk = pk;
			}
		
			private String title;
		
			public void setTitle(String title) {
				this.title = title;
			}
			
			public String getTitle() {
				return title;
			}
		}

 2.使用@Id将多个属性申明为主键,另外在该类的上使用@IdClass(value="你需要符合的类")
  如:

 

@IdClass(value="TeacherPK.class")
		public class Teacher{
			private int id;
			private String name;
			
			private String title;
			
			@Id
			public int getId() {
				return id;
			}
			@Id
			public String getName() {
				return name;
			}
		
			public void setId(int id) {
				this.id = id;
			}
		
			public void setName(String name) {
				this.name = name;
			}
			
			public void setTitle(String title) {
				this.title = title;
			}
			
			public String getTitle() {
				return title;
			}
		}
		
		public class TeacherPK implements Serializable {

			private int id;
			
			private String name;
		
			public String getName() {
				return name;
			}
		
			public void setName(String name) {
				this.name = name;
			}
		
			public int getId() {
				return id;
			}
		
			public void setId(int id) {
				this.id = id;
			}
		
			@Override
			public boolean equals(Object obj) {
				if(obj instanceof TeacherPK){
					TeacherPK pk = (TeacherPK) obj;
					if(this.id == pk.getId()&&this.name.equals(pk.getName())){
						return true;
					}
				}
				return false;
			}
			
			@Override
			public int hashCode() {
				return this.name.hashCode();
			}
		}

 3.将主键属性设置@EmbeddedId申明即可,主键类可不申明任何注解
  如:

 

 

//主键类
		public class TeacherPK implements Serializable {
		
			private int id;
			
			private String name;
		
			public String getName() {
				return name;
			}
		
			public void setName(String name) {
				this.name = name;
			}
		
			public int getId() {
				return id;
			}
		
			public void setId(int id) {
				this.id = id;
			}
		
			@Override
			public boolean equals(Object obj) {
				if(obj instanceof TeacherPK){
					TeacherPK pk = (TeacherPK) obj;
					if(this.id == pk.getId()&&this.name.equals(pk.getName())){
						return true;
					}
				}
				return false;
			}
			
			@Override
			public int hashCode() {
				return this.name.hashCode();
			}
		}
		
		public class Teacher {
			
			private TeacherPK pk;
			
			@EmbeddedId
			public TeacherPK getPk() {
				return pk;
			}
		
			public void setPk(TeacherPK pk) {
				this.pk = pk;
			}
		
			private String title;
		
			public void setTitle(String title) {
				this.title = title;
			}
			
			public String getTitle() {
				return title;
			}
		}

 这三种方式各有各的好处,个人认为在开发中第三种比较常用。

注意:联合主键不会生成新的表。

0
0
分享到:
评论

相关推荐

    Hibernate注解映射联合主键

    在Hibernate中,有三种主要的注解方式来映射联合主键,以下是对这三种方式的详细解释: 1. **使用`@Embeddable`和`@Id`** 在这种映射方式中,联合主键的字段被放在一个单独的类中,这个类需要实现`java.io....

    hibernate-annotations-3.4.0.GA

    使用`@Inheritance`注解可以处理类继承关系,支持单表继承(SINGLE_TABLE)、联合继承(JOINED)和表-per-hierarchy(TABLE_PER_CLASS)策略。 5. **复合主键** `@EmbeddedId`和`@Embeddable`注解组合可以创建...

    java hibernate使用注解来定义联合主键

    本文将详细介绍如何使用Hibernate注解来定义联合主键。 首先,我们需要了解联合主键的定义方式。在Hibernate API中,有三种方法来定义联合主键: 1. 使用`@Embeddable`注解定义一个独立的主键类,然后将这个类的...

    JPA注解实现联合主键

    #### 使用JPA注解实现联合主键 在JPA中,我们可以通过`@IdClass`和`@Id`注解来实现联合主键。下面将详细介绍如何通过这些注解来实现联合主键。 ### 创建复合主键类 首先,需要创建一个复合主键类来存储需要组成...

    Hibernate联合主键的例子

    在Hibernate中,我们可以使用`@Embeddable`和`@EmbeddedId`注解来定义和使用联合主键。 1. **创建联合主键类:** 在MyEclipse中,我们首先创建一个Java类来表示联合主键。这个类需要被标记为`@Embeddable`,并包含...

    hibernate-release-5.0.7.Final的html文档说明

    1. 联合主键:当需要多个字段共同作为主键时,可以使用@EmbeddedId和@Embeddable进行配置。 2. 一对多、多对一、一对一关联:通过@OneToMany、@ManyToOne、@OneToOne定义对象间的关联关系。 3.懒加载和立即加载:...

    hibernate-distribution-3.6.2.Final-dist jar包

    4. **会话(Session)**:Hibernate的核心接口之一,它是与数据库交互的主要入口,提供了持久化操作的方法,如save()、update()、delete()、load()和get()等。 5. **事务(Transaction)**:在Hibernate中,事务处...

    Hibernate注解jar包

    使用Hibernate注解时,需要确保JPA的API(如`javax.persistence.*`)和Hibernate的实现(如`org.hibernate.annotations.*`)都已引入。开发中,通过注解定义实体类和关系,然后通过SessionFactory和Session进行CRUD...

    《精通Hibernate》学习-对象关系映射基础.zip

    11. 联合主键和复合主键:在某些情况下,一个表的主键由多个字段组成。Hibernate支持这种复合主键的映射。 12. 查询缓存和二级缓存:为了提高性能,Hibernate提供了缓存机制。查询缓存存储查询结果,避免重复执行...

    hibernate-annotations-3.1beta6

    其中,Hibernate注解是其核心特性之一,它允许开发者通过在实体类上添加注解来描述数据表结构,而无需编写XML配置文件。本文将详细探讨Hibernate注解3.1beta6版本中的关键概念和技术。 1. **注解基础** Hibernate...

    hibernate复合主键配置和使用

    《Hibernate复合主键配置与使用详解》 在Java开发中,Hibernate作为一款强大的ORM框架,大大简化了数据库操作。然而,当我们面临复杂的数据表结构,尤其是涉及到复合主键时,如何在Hibernate中进行配置和使用就显得...

    hibernate注解详解说明

    Hibernate 提供了多种继承映射策略,如 `@Inheritance(strategy=InheritanceType.SINGLE_TABLE)`、`@DiscriminatorColumn` 和 `@DiscriminatorValue`,以支持单表继承、子类表和联合主键等。 #### 映射关联关系 - ...

    hibernate-annotation-3.2.1

    《深入理解Hibernate注解3.2.1》 Hibernate,作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作。而Hibernate的注解版本,特别是3.2.1版本,更是其发展历程中的一个重要里程碑,它使得...

    hibernate-annotations-3.4.0(参考文档,doc/../index.html)

    Hibernate Annotations是Hibernate框架的一个扩展,它允许开发者使用Java语言的注解(Annotations)来定义对象与数据库表之间的映射关系,替代传统的Hibernate XML配置文件。这使得代码更加简洁,更易于维护,并且与...

    hibernate-release-4.1.9.Final.zip

    1. 联合主键:允许使用多个字段作为主键。 2. 懒加载(Lazy Loading):对象的关联关系在需要时才加载,提高性能。 3. 自动更新(Automatic Updates):当对象状态改变时,Hibernate会自动同步到数据库。 4. 回滚...

    hibernate-release-4.1.8.Final.tgz

    1. 实体管理:定义实体类,使用注解进行属性映射,如 @Id 表示主键,@ManyToOne 或 @OneToMany 表示关联关系。 2. 数据库连接配置:通过 Hibernate 配置文件(hibernate.cfg.xml)设置数据库连接参数。 3. Session ...

    Hibernate教程08_关系映射之联合主键

    在Hibernate中,实现联合主键可以通过使用`@Embeddable`和`@EmbeddedId`注解。首先,我们需要创建一个包含所有主键字段的类,并使用`@Embeddable`标记。这个类通常会作为其他实体类的属性,用`@EmbeddedId`注解。...

    Hibernate面试题专栏 - 最全的Hibernate面试题, Hibernate笔试题, Hibernate问题

    - 联合主键是多个字段共同构成的主键,可以通过@EmbeddedId和@Embeddable注解实现。 - 复合主键是自动生成的主键,通过@TableGenerator或@IdClass实现。 **8. 异常处理** - Hibernate提供了自己的异常体系,如...

    Java相关课程系列笔记之十四Hibernate学习笔记

    【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...

    Hibernate_zh-cn中文帮助文档

    10. **继承映射**:Hibernate支持类继承关系的映射,如单表继承、联合继承和表-per-hierarchy映射策略。 11. **实体生命周期**:Hibernate管理对象的生命周期,包括瞬态、持久化、托管和脱管状态。`Session`的`save...

Global site tag (gtag.js) - Google Analytics