联合主键的注解使用:
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; } }
这三种方式各有各的好处,个人认为在开发中第三种比较常用。
注意:联合主键不会生成新的表。
相关推荐
在Hibernate中,有三种主要的注解方式来映射联合主键,以下是对这三种方式的详细解释: 1. **使用`@Embeddable`和`@Id`** 在这种映射方式中,联合主键的字段被放在一个单独的类中,这个类需要实现`java.io....
使用`@Inheritance`注解可以处理类继承关系,支持单表继承(SINGLE_TABLE)、联合继承(JOINED)和表-per-hierarchy(TABLE_PER_CLASS)策略。 5. **复合主键** `@EmbeddedId`和`@Embeddable`注解组合可以创建...
本文将详细介绍如何使用Hibernate注解来定义联合主键。 首先,我们需要了解联合主键的定义方式。在Hibernate API中,有三种方法来定义联合主键: 1. 使用`@Embeddable`注解定义一个独立的主键类,然后将这个类的...
#### 使用JPA注解实现联合主键 在JPA中,我们可以通过`@IdClass`和`@Id`注解来实现联合主键。下面将详细介绍如何通过这些注解来实现联合主键。 ### 创建复合主键类 首先,需要创建一个复合主键类来存储需要组成...
在Hibernate中,我们可以使用`@Embeddable`和`@EmbeddedId`注解来定义和使用联合主键。 1. **创建联合主键类:** 在MyEclipse中,我们首先创建一个Java类来表示联合主键。这个类需要被标记为`@Embeddable`,并包含...
1. 联合主键:当需要多个字段共同作为主键时,可以使用@EmbeddedId和@Embeddable进行配置。 2. 一对多、多对一、一对一关联:通过@OneToMany、@ManyToOne、@OneToOne定义对象间的关联关系。 3.懒加载和立即加载:...
4. **会话(Session)**:Hibernate的核心接口之一,它是与数据库交互的主要入口,提供了持久化操作的方法,如save()、update()、delete()、load()和get()等。 5. **事务(Transaction)**:在Hibernate中,事务处...
使用Hibernate注解时,需要确保JPA的API(如`javax.persistence.*`)和Hibernate的实现(如`org.hibernate.annotations.*`)都已引入。开发中,通过注解定义实体类和关系,然后通过SessionFactory和Session进行CRUD...
11. 联合主键和复合主键:在某些情况下,一个表的主键由多个字段组成。Hibernate支持这种复合主键的映射。 12. 查询缓存和二级缓存:为了提高性能,Hibernate提供了缓存机制。查询缓存存储查询结果,避免重复执行...
其中,Hibernate注解是其核心特性之一,它允许开发者通过在实体类上添加注解来描述数据表结构,而无需编写XML配置文件。本文将详细探讨Hibernate注解3.1beta6版本中的关键概念和技术。 1. **注解基础** Hibernate...
《Hibernate复合主键配置与使用详解》 在Java开发中,Hibernate作为一款强大的ORM框架,大大简化了数据库操作。然而,当我们面临复杂的数据表结构,尤其是涉及到复合主键时,如何在Hibernate中进行配置和使用就显得...
Hibernate 提供了多种继承映射策略,如 `@Inheritance(strategy=InheritanceType.SINGLE_TABLE)`、`@DiscriminatorColumn` 和 `@DiscriminatorValue`,以支持单表继承、子类表和联合主键等。 #### 映射关联关系 - ...
《深入理解Hibernate注解3.2.1》 Hibernate,作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作。而Hibernate的注解版本,特别是3.2.1版本,更是其发展历程中的一个重要里程碑,它使得...
Hibernate Annotations是Hibernate框架的一个扩展,它允许开发者使用Java语言的注解(Annotations)来定义对象与数据库表之间的映射关系,替代传统的Hibernate XML配置文件。这使得代码更加简洁,更易于维护,并且与...
1. 联合主键:允许使用多个字段作为主键。 2. 懒加载(Lazy Loading):对象的关联关系在需要时才加载,提高性能。 3. 自动更新(Automatic Updates):当对象状态改变时,Hibernate会自动同步到数据库。 4. 回滚...
1. 实体管理:定义实体类,使用注解进行属性映射,如 @Id 表示主键,@ManyToOne 或 @OneToMany 表示关联关系。 2. 数据库连接配置:通过 Hibernate 配置文件(hibernate.cfg.xml)设置数据库连接参数。 3. Session ...
在Hibernate中,实现联合主键可以通过使用`@Embeddable`和`@EmbeddedId`注解。首先,我们需要创建一个包含所有主键字段的类,并使用`@Embeddable`标记。这个类通常会作为其他实体类的属性,用`@EmbeddedId`注解。...
- 联合主键是多个字段共同构成的主键,可以通过@EmbeddedId和@Embeddable注解实现。 - 复合主键是自动生成的主键,通过@TableGenerator或@IdClass实现。 **8. 异常处理** - Hibernate提供了自己的异常体系,如...
【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...
10. **继承映射**:Hibernate支持类继承关系的映射,如单表继承、联合继承和表-per-hierarchy映射策略。 11. **实体生命周期**:Hibernate管理对象的生命周期,包括瞬态、持久化、托管和脱管状态。`Session`的`save...