在学习hibernate时,联合主键有两种实现方式:
1.xml实现;
2.注解实现.
在定义联合主键时,我们需要为主键定义一个类,同时在包含该主键的类上定义该主键累的对象,需要说明的是
该联合主键类必须实现Serializable接口,不然有可能在对象缓存时会出现问题。
下面我们来举例:
此处又一学生类:
package ly.suse.model; //学生类 public class Student { //定义主键对象 private StudentPK pk; public StudentPK getPk() { return pk; } public void setPk(StudentPK pk) { this.pk = pk; } private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
该学生类中的主键即为StudentPK。
然后来看主键类的实现:
package ly.suse.model; import java.io.Serializable; //主键类,用联合主键记得重写equals and hashcode public class StudentPK 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; } //重写equals方法 @Override public boolean equals(Object obj) { if(obj instanceof StudentPK){ StudentPK pk = (StudentPK) obj; if(this.id == pk.getId()&&this.name.equals(pk.getName())){ return true; } } return false; } //重写hashcode方法 @Override public int hashCode() { return this.name.hashCode(); } }
然后就是在Student.hbm.xml文件中配置;
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="org.hibernate.tutorial.domain"> <class name="ly.suse.model.Student" table="student"> <!--使用composite-id元素来申明联合主键,name指明该主键在该类中的属性名称,class指明该主键的类--> <composite-id name="pk" class="ly.suse.model.StudentPK"> <!--key-property指明该主键类所拥有的属性,name指明该属性名称 --> <key-property name="id" /> <key-property name="name" /> </composite-id> <property name="age"></property> </class> </hibernate-mapping>
这样我们就写好了联合主键的xml实现方式:
这里我们测试一下写了一个测试类:
import ly.suse.model.Student; import ly.suse.model.StudentPK; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class StudentTest { public static void main(String[] args) { //定义主键类对象 StudentPK pk = new StudentPK(); //定义Student对象 Student s = new Student(); //设置主键属性 pk.setId(3); pk.setName("zhangsan"); //将该主键设置到s对象中 s.setPk(pk); s.setAge(1); //获取hibernate配置对象 Configuration cfg = new Configuration(); //创建hibernate SessionFactory对象 SessionFactory sf = cfg.configure().buildSessionFactory(); //用SessionFactory创建Session对象 Session session = sf.openSession(); //开始事务申明 Transaction tx = session.beginTransaction(); //保存s对象 session.save(s); //提交事务 tx.commit(); //关闭session关闭资源 session.close(); //关闭SessionFactory sf.close(); } }
测试完全通过,只不过要注意这里我没有student这张表,但在hibernate配置是是配置为update,主键在这里没有单独生成一张表哦!
+----+----------+------+
| id | name | age |
+----+----------+------+
| 3 | zhangsan | 1 |
+----+----------+------+
相关推荐
在Hibernate中,这种关系通过中间关联表(也称为连接表或联合表)来实现,该表包含两个实体的主键作为其外键。 二、配置Many-to-Many关系 在Hibernate配置文件(如hibernate.cfg.xml)中,你需要为实体类定义映射...
### Hibernate联合主键详解 #### 1. 定义联合主键 在Hibernate中定义联合主键主要依赖于`<composite-id>`标签。如示例文件所示,`Users`类被设计为具有联合主键,该主键由`name`和`tel`两个字段组成。在`...
而Hibernate Annotations是Hibernate框架的一部分,它引入了Java 5的注解来配置实体类,取代了传统的XML配置方式,使得代码更加简洁易读。本文将深入探讨Hibernate Annotations 3.4.0.GA版本中的关键特性和应用。 1...
在本教程中,我们将通过一个具体的MyEclipse例子来探讨如何在Hibernate中实现联合主键。 首先,我们需要理解联合主键的基本概念。联合主键由两个或多个列组成,这些列的值组合起来在表中必须是唯一的。这种设计模式...
在 Hibernate 中,联合主键(Composite Key)是指由两个或多个属性共同构成的主键,这种主键在数据库设计中常见于需要多个字段唯一标识一条记录的情况。在 Hibernate 中设置联合主键通常需要以下几个步骤: 1. **...
1. 联合主键:当需要多个字段共同作为主键时,可以使用@EmbeddedId和@Embeddable进行配置。 2. 一对多、多对一、一对一关联:通过@OneToMany、@ManyToOne、@OneToOne定义对象间的关联关系。 3.懒加载和立即加载:...
1. **对象关系映射(ORM)**:Hibernate 提供了一种将Java类与数据库表之间进行映射的方法,使得开发者可以通过操作对象来实现对数据库的CRUD(创建、读取、更新和删除)操作,避免了直接编写SQL语句的繁琐过程。...
11. 联合主键和复合主键:在某些情况下,一个表的主键由多个字段组成。Hibernate支持这种复合主键的映射。 12. 查询缓存和二级缓存:为了提高性能,Hibernate提供了缓存机制。查询缓存存储查询结果,避免重复执行...
其中,Hibernate注解是其核心特性之一,它允许开发者通过在实体类上添加注解来描述数据表结构,而无需编写XML配置文件。本文将详细探讨Hibernate注解3.1beta6版本中的关键概念和技术。 1. **注解基础** Hibernate...
Hibernate作为Java领域最著名的对象关系映射(ORM)框架之一,极大地简化了数据库操作。在3.4.0版本中,它引入了Annotations特性,使得Java开发者能够更加直观、便捷地进行数据持久化。本篇文章将深入探讨Hibernate ...
在XML配置时代,我们需要在Hibernate的映射文件(.hbm.xml)中显式声明复合主键。现在,大多数项目都使用注解配置,但如果你仍然需要处理旧的项目,这里是如何配置的示例: ```xml <hibernate-mapping> ...
而Hibernate的注解版本,特别是3.2.1版本,更是其发展历程中的一个重要里程碑,它使得开发者能够通过在Java类和属性上添加注解,实现对数据库的映射,从而减少了XML配置文件的依赖。这篇文档将详细介绍Hibernate注解...
通过深入学习和熟练运用 Hibernate 4.1.8.Final,开发者可以在 Java 应用中实现高效、稳定的数据库操作,提高项目开发效率,降低维护成本。无论是在小型项目还是大型企业级应用中,Hibernate 都能发挥其强大的威力,...
ORM思想,hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, ...
1. 联合主键:允许使用多个字段作为主键。 2. 懒加载(Lazy Loading):对象的关联关系在需要时才加载,提高性能。 3. 自动更新(Automatic Updates):当对象状态改变时,Hibernate会自动同步到数据库。 4. 回滚...
- 联合主键是多个字段共同构成的主键,可以通过@EmbeddedId和@Embeddable注解实现。 - 复合主键是自动生成的主键,通过@TableGenerator或@IdClass实现。 **8. 异常处理** - Hibernate提供了自己的异常体系,如...
在Hibernate中,实现联合主键可以通过使用`@Embeddable`和`@EmbeddedId`注解。首先,我们需要创建一个包含所有主键字段的类,并使用`@Embeddable`标记。这个类通常会作为其他实体类的属性,用`@EmbeddedId`注解。...
ORM思想,hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, ...
【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...