hibernate中,多对多的关联关系
诸多场景多会使用到多对多的关联关系。譬如:老师与学生之间
在hibernate中,两表之间没有直接的关联,所要要借助第三方表来确认两表之间的关系。
在持久化的实体对象当中,均使用集合类封装另一对象;
在Xxx.hbm.xml中:
集合的标签中创建一个第三方的表两边的表必须一致;
<key></key>子表签来声明外键字段名;
使用<many-to-many></many-to-many>子标签来实现多对多的关联关系,class属性指的是另一类路径,column属性指的是另一表的外键字段名,需要一致。
以老师与学生之前关系为实例:
Javabean持久化对象:
student类
public class Student { private int id; private String name; private Set<Teacher> teachers; //省去get/set方法 }
Teacher类
public class Teacher { private int id; private String name; private Set<Student> students; //省去get/set方法 }
student.hbm.xml配置:
<hibernate-mapping> <class name="com.usc.geowind.lilin.bean.manyToMany.Student" table="Student"> <!-- type指明当前字段的类型 name对应实体中的属性名 --> <id type="integer" name="id"> <!-- 提供ID自增的策略 native会根据数据库自行判断 --> <generator class="native" /> </id> <property name="name" column="name"></property> <!-- 不能直接指定两者之间的多对多的关联关系,则需要借助第三方来确认关系 --> <!-- table是建立两表之前的关系的第三方表 --> <set name="teachers" table="ST"> <!-- 外键 --> <key column="student_id"></key> <!-- 多对多的关联关系的标签 ,class指定的是类, column值是另外一方的外键字段名,需要一直 --> <many-to-many class="com.usc.geowind.lilin.bean.manyToMany.Teacher" column="teacher_id"></many-to-many> </set> </class> </hibernate-mapping>
teach.hbm.xml配置:
<hibernate-mapping> <class name="com.usc.geowind.lilin.bean.manyToMany.Teacher" table="Teacher"> <!-- type指明当前字段的类型 name对应实体中的属性名 --> <id type="integer" name="id"> <!-- 提供ID自增的策略 native会根据数据库自行判断 --> <generator class="native" /> </id> <property name="name" column="name"></property> <!-- 不能直接指定两者之间的多对多的关联关系,则需要借助第三方来确认关系 --> <!-- table是建立两表之前的关系的第三方表 两边必须使用同一张第三方表 --> <set name="students" table="ST"> <!-- 外键 --> <key column="teacher_id"></key> <!-- 多对多的关联关系的标签 ,class指定的是类, column值是另外一方的外键字段名,需要一致 --> <many-to-many class="com.usc.geowind.lilin.bean.manyToMany.Student" column="student_id"></many-to-many> </set> </class> </hibernate-mapping>
2.使用第三方实体来实现多对多的关联关系:
在两对象之间使用集合的方式封装对方实体,而在第三方的实体中应用这两实体。
在三者之间的关联关系:两者实体与第三方实体之间均是一对多的关联关系,第三方实体与这两者之间均是多对一的关联关系。
还是以老师学生之间的多对多的关联关系,一STB为第三方实体为例:
Student:
public class Student2 { private int id; private String name; private Set<Teacher2> teachers;//另一对象 //省去get/set方法 }
Teacher:
public class Teacher2 { private int id; private String name; private Set<Student2> students;//另一对象 //省去get/set方法 }
STB:
public class STB { private int id; private Student2 student; private Teacher2 teacher; //省去get/set方法 }
Xxx.hbm.xml配置:
Student.hbm.xml部分配置:
<set name="teachers" > <!-- 外键 --> <key column="student_id"></key> <!--与第三方实体是一对多关联关系 class 值指向第三方的实体 --> <one-to-many class="com.usc.geowind.lilin.bean.manyToMany.STB"/> </set>
Teacher.hbm.xml中部分配置:
<set name="students"> <!-- 外键 --> <key column="teacher_id"></key> <!-- 与第三方实体是一对多关联关系 class 值指向第三方的实体 --> <one-to-many class="com.usc.geowind.lilin.bean.manyToMany.STB" /> </set>
STB.hbm.xml:
<hibernate-mapping> <class name="com.usc.geowind.lilin.bean.manyToMany.STB" table="STB"> <!-- type指明当前字段的类型 name对应实体中的属性名 --> <id type="integer" name="id"> <!-- 提供ID自增的策略 native会根据数据库自行判断 --> <generator class="native" /> </id> <!--与两者之间均是多对一关联关系--> <many-to-one name="student" column="student_id"></many-to-one> <many-to-one name="teacher" column="teacher_id"></many-to-one> </class> </hibernate-mapping>
相关推荐
**标题:“Hibernate关系映射”** 在Java世界中,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者将数据库操作转化为面向对象的方式,极大地简化了数据持久化的复杂性。"多对一"关系映射是Hibernate...
在Java企业级开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中...
这篇PPT主要介绍了Hibernate的核心概念、持久层的重要性以及ORM(对象关系映射)技术,同时也提及了Hibernate与其他持久层框架的对比。 **Hibernate核心概念** Hibernate是开源的Java库,它提供了一种对象-关系...
SSH(Struts、Spring、Hibernate)是经典的Java Web开发框架,其中Hibernate负责数据访问层,提供了强大的ORM(对象关系映射)功能。本篇文章将深入探讨Hibernate中的一对多和多对多关系映射。 首先,让我们理解一...
这个框架集合了Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)功能,Struts的MVC(Model-View-Controller)设计模式,以及Hibernate的对象关系映射(ORM)解决方案。在构建SSH框架时,...
其中,Hibernate是一个对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。在SSH项目中,正确配置Hibernate的jar包是确保数据库操作顺利进行的关键步骤。 该压缩包“SSH中Hibernate所需基本jar包”包含...
在这个组合中,Hibernate作为持久层框架,负责对象关系映射(ORM),Spring则在业务逻辑层提供依赖注入(DI)和面向切面编程(AOP),而Struts则是控制层,处理用户请求并转发到相应的业务逻辑。 Hibernate 5是...
本教程将聚焦于如何在IntelliJ IDEA(简称IDEA)环境中集成Hibernate,以便利用其强大的对象关系映射(ORM)功能。"基于IDEA的SSH项目之五:集成Hibernate----lib包"这部分内容主要涉及的是项目的库依赖管理,即`lib...
本篇主要关注的是SSH中的Hibernate部分,一个强大的对象关系映射(ORM)框架,它允许开发者用Java对象来操作数据库,而无需直接编写SQL语句。 在“SSH学习记录(5)-简单Hibernate”中,我们可能将深入探讨以下几点:...
2. **Hibernate框架**:Hibernate是一个对象关系映射(Object-Relational Mapping, ORM)工具,它简化了数据库操作,将Java对象和数据库表之间的映射关系自动处理。在SSH中,Hibernate作为数据访问层,负责数据库的...
首先,Hibernate5是Java领域的一个强大对象关系映射(ORM)框架,它允许开发者通过面向对象的方式操作数据库,而无需直接编写SQL语句。这大大提高了开发效率,同时也降低了代码的耦合度。 Spring框架则是一个全面的...
通过学习和理解这些代码,你可以更好地掌握SSH框架下Hibernate的使用方法。 总的来说,SSH中的Hibernate使得开发者能够更加专注于业务逻辑,而不是数据库操作,提高了开发效率和代码质量。在实际项目中,通过SSH的...
然后,我们需要为每个实体类创建对应的Hibernate映射文件(.hbm.xml),这些文件描述了Java对象与数据库表之间的映射关系。例如,如果我们有一个User类,映射文件可能如下所示: ```xml <hibernate-mapping> ...
SSH框架是Java开发中常用的三大框架集成,包括Struts2、Spring和Hibernate。这个压缩包提供了搭建SSH框架所需的所有jar包和配置文件,使得开发者能够快速构建基于这三大框架的应用。 Struts2作为MVC(Model-View-...
3. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互。通过Hibernate,开发者可以将Java对象直接映射到数据库表,无需编写繁琐的SQL语句,从而减少了数据库操作的复杂性...
5. **整合SSH2**:SSH2的整合意味着Struts负责控制流程,Spring负责对象管理和事务处理,而Hibernate则处理数据层的操作。通过Spring的AOP和DI,可以将Struts和Hibernate的配置紧密集成,实现松耦合的系统架构。在...
### SSH--Hibernate详解 #### ORM概念与重要性 ORM(对象关系映射)是一种编程技术,用于将对象模型表示的数据与关系型数据库管理系统中的数据相互转换。简而言之,ORM提供了一种机制,使得开发者可以通过操作Java...
SSH(Struts、Spring、Hibernate)是Java Web开发中常见的三大框架,而Hibernate作为ORM(对象关系映射)框架,是连接Java应用程序与数据库的关键组件。本总结将围绕Hibernate的核心概念、配置、对象状态、关系映射...
3. Hibernate框架:Hibernate是一个对象关系映射(ORM)工具,它简化了Java应用程序与数据库之间的交互。Hibernate通过XML配置或注解将Java对象与数据库表对应,实现了数据的透明持久化。它支持懒加载、级联操作、...
Hibernate是一个对象关系映射(ORM)工具,它简化了数据库操作。通过Hibernate,开发者可以使用Java对象来操作数据库记录,而无需编写大量的SQL语句。Hibernate支持自动持久化、事务管理和查询服务,其核心配置文件...