在多对多的关联关系中,可拆分为两个一对多的关联关系,即在两个表中间增加一个关联表,记录这两个表之间的关联关系。若抛开关联表,则原2个表之间看不出任何的关系。
以为考试类别和考试科目为例,详细讲解在添加关联表的情况下两个表之间的hibernate设置。 考试类别表:exam_sort_enum id:integer name:string 考试科目表:subject id:integer name:string 考试类别科目关联表 exam_sort_enum_id:integer 对应考试类别表的id subject_id:integer 对应考试科目表的id
ExamSortEnum.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping> <class name="model.ExamSortEnum" table="EXAM_SORT_ENUM" lazy="false" > <id name="id" type="integer" column="ID" length="22" > <generator class="increment" /> </id>
<property name="name" type="string" column="NAME" length="255" /> <set name="subject" table="EXAM_SORT_ENUM_SUBJECT" lazy="true" cascade="save-update"> <key column="exam_sort_enum_id"/> <many-to-many column="subject_id" class="model.Subject"/> </set> </class> </hibernate-mapping>
ExamSortEnum.java
package model;
import java.io.Serializable; import java.util.HashSet; import java.util.Set;
public class ExamSortEnum implements Serializable{
private static final long serialVersionUID = <chmetcnv w:st="on" unitname="l" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1L</chmetcnv>; private Integer id; private String name; private Set subject = new HashSet();
public ExamSortEnum(){} public ExamSortEnum(Integer id){ setId(id); }
public void setSubject(Set subject){ this.subject = subject; }
public Set getSubject(){ return this.subject; }
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; } }
关于映射文件:
映射文件要设置set, name=subject 为ExamSortEnum.java文件中定义的Set对象,存储多个Subject类型的容器。 table="EXAM_SORT_ENUM_SUBJECT" 为对应的中间表的表名,由于两个业务表之间不能直接打交道,只能通过中间表来进行关联。 lazy="true" 延迟加载 cascade="save-update" 级联保存更新,若设置为all,delete,all-delete-orphans,则在删除一个ExamSortEnum对象时,关联的Subject对象也被删除,而此关联的subject对象可能被其他的为ExamSortEnum对象所引用。 <key column="exam_sort_enum_id"/> 指定中间表中参照为Exam_Sort_Enum表的外键为exam_sort_enum_id <many-to-many> column="subject_id" Exam_Sort_Enum表参照Subject表的外键为subject_id,即Exam_Sort_Enum表通过subject_id与Subject表关联 class="model.Subject" 指定set中name=subject中存放的是model.Subject对象。
Subject.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping> <class name="model.Subject" table="SUBJECT" lazy="false" > <id name="id" type="integer" column="ID" length="22" > <generator class="increment" /> </id>
<property name="name" type="string" column="NAME" length="200" />
<set name="examSortEnum" table="EXAM_SORT_ENUM_SUBJECT" lazy="true" inverse="true" cascade="save-update"> <key column="subject_id"/> <many-to-many column="exam_sort_enum_id" class="model.ExamSortEnum"/> </set> </class> </hibernate-mapping>
Subject.java
package model;
import java.io.Serializable; import java.util.HashSet; import java.util.Set;
public class Subject implements Serializable{
private static final long serialVersionUID = <chmetcnv w:st="on" unitname="l" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1L</chmetcnv>; private Integer id; private String name; private Set examSortEnum = new HashSet();
public Subject(){} public Subject(Integer id){ setId(id); }
public void setExamSortEnum(Set examSortEnum){ this.examSortEnum = examSortEnum; } public Set getExamSortEnum(){ return this.examSortEnum; }
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; } }
关于映射文件: 内容与ExamSortEnum.hbm.xml差不多,只是多了一个inverse="true",告诉hibernate控制权不在此处,两个映射文件只能设置一个。
测试类: package model;
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration;
public class ExamSortEnumTest { public static SessionFactory sf ;
static{ try{ Configuration cfg = new Configuration().configure(); sf = cfg.buildSessionFactory(); }catch(Exception e){ e.printStackTrace(); } }
public void insert1(){ Session sess = sf.openSession(); Transaction tx = sess.beginTransaction();
Subject sa = new Subject(); sa.setName("A1");
Subject sb = new Subject(); sb.setName("B1");
Subject sc = new Subject(); sc.setName("C1");
ExamSortEnum esea = new ExamSortEnum(); esea.setName("A"); esea.getSubject().add(sa); esea.getSubject().add(sc);
ExamSortEnum eseb = new ExamSortEnum(); eseb.setName("B"); eseb.getSubject().add(sb); eseb.getSubject().add(sc);
sess.save(esea); sess.save(eseb);
tx.commit(); sess.close();
}
public static void main(String[] args){ ExamSortEnumTest et = new ExamSortEnumTest(); et.insert1(); } }
执行后的结果: 考试类别表:exam_sort_enum id name <chmetcnv w:st="on" unitname="a" sourcevalue="3" hasspace="True" negative="False" numbertype="1" tcsc="0">3 A</chmetcnv> 4 B
考试科目表:subject id name <chmetcnv w:st="on" unitname="C" sourcevalue="3" hasspace="True" negative="False" numbertype="1" tcsc="0">3 C</chmetcnv>1 <chmetcnv w:st="on" unitname="a" sourcevalue="4" hasspace="True" negative="False" numbertype="1" tcsc="0">4 A</chmetcnv>1 5 B1
考试类别科目关联表 exam_sort_enum_id subject_id 3 3 3 4 4 3 4 5
|
相关推荐
hibernate.cfg.xml 文件是 Hibernate 的基本配置文件,它包含了 Hibernate 与数据库的基本连接信息。在 Hibernate 工作的初始阶段,这些信息被加载到 Configuration 和 SessionFactory 实例中。该文件的基本结构如下...
在本案例中,我们将探讨如何在已有的MySQL数据库环境下,配置Spring和Hibernate来实现数据访问层。 首先,我们需要在项目中引入Spring和Hibernate的相关依赖。在Maven或Gradle的构建文件中,添加对应的依赖库,如...
在这个“hibernate完整配置文件”中,我们将深入探讨如何配置`hibernate.cfg.xml`文件以及相关的应用设置。 `hibernate.cfg.xml`是Hibernate的核心配置文件,它包含了连接数据库所需的所有信息,如数据库URL、...
1. **Hibernate配置文件**(hibernate.cfg.xml):这个文件包含了连接数据库所需的基本信息,如数据库URL、用户名、密码等。 2. **实体关系数据库映射文件**(.hbm.xml):这些文件定义了Java类与数据库表之间的映射...
**Hibernate基本配置演示** 在Java开发中,Hibernate是一款强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者能够用Java对象来处理数据。这篇教程将深入讲解Hibernate的基本配置过程,确保你能顺利...
《代码自动生成工具 Hibernate配置文件工具 MagicalTools 深度解析》 在现代软件开发过程中,提高效率和减少重复劳动是至关重要的。为此,开发者们不断寻求自动化工具的帮助,以简化繁琐的任务,如代码编写、配置...
以下是一些关于Hibernate基本配置和所需JAR包的详细解释: 1. **Hibernate Core**: 这是Hibernate的核心库,包含了所有必要的API和实现,如SessionFactory、Session、Transaction等。在`hibernate-core-x.x.x.Final...
《Hibernate配置文件详解与必备库解析》 在Java开发领域,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,要充分利用Hibernate的功能,理解其配置文件和依赖库至关重要。本文将...
本教程将深入讲解如何根据数据库表自动生成实体类、Hibernate配置文件以及实体映射文件。 首先,我们需要了解Hibernate的基本概念。Hibernate提供了一个在Java应用中使用的持久化模型,它允许开发者用面向对象的...
【hibernate基本配置及使用方法】 Hibernate是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序与关系数据库之间的交互。本教程将详细解释Hibernate的基本配置和使用步骤,帮助初学者快速掌握这一强大...
### Hibernate配置文件详解 #### 一、概述 Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库交互的过程。在使用Hibernate的过程中,一个关键的配置文件是`hibernate.cfg.xml`。这个文件...
**Eclipse Hibernate基本配置及简单实现** 在Java开发中,Hibernate是一个非常流行的持久化框架,它简化了数据库操作,使得开发者可以专注于业务逻辑而不是数据库层面的细节。本篇将介绍如何在Eclipse环境中配置和...
### Hibernate配置文件hibernate.cfg.xml的详细解释 #### 一、引言 在Java持久化框架Hibernate中,`hibernate.cfg.xml`是核心配置文件之一,它用于配置Hibernate的运行环境,包括数据库连接信息、性能参数以及其他...
在实际应用中,还需要配置Hibernate的主配置文件(hibernate.cfg.xml),指定数据库连接信息、方言、缓存策略等。同时,每个实体类也需要相应的映射文件(.hbm.xml)或使用注解进行映射。 总的来说,这个"hibernate...
总之,Hibernate 4 的基本配置包括了XML配置文件、编程式配置、数据库连接方式(JDBC或DataSource)、连接池配置以及事务管理。理解并熟练掌握这些配置方法对于高效使用 Hibernate 进行数据库操作至关重要。
在这个“Hibernate入门”教程中,我们将深入探讨Hibernate的基本概念、配置文件以及如何进行增删改查操作。 首先,Hibernate的核心是其配置文件(通常命名为`hibernate.cfg.xml`),这是连接数据库的关键。配置文件...
标题中的"AutoCode_SSHDemo_Setup自动生成HIBERNATE 配置文件 JAVA代码自动生成"表明这是一个关于自动化代码生成的工具,主要用于简化Hibernate配置文件和Java代码的编写过程。SSH在这里指的是Spring、Struts和...
3. 配置Hibernate:创建一个hibernate.cfg.xml配置文件,设置数据库连接信息(如URL、用户名、密码)、JDBC驱动、方言等。 4. 初始化SessionFactory:在代码中通过Configuration类加载配置文件,然后创建...