`

Hibernate多对多说明

阅读更多

数据库:
--学生表
create table stu
(
  s_id int identity(1,1) not null primary key,
  s_name varchar(50),
   s_sex varchar(20)
)
Go
--科目表
create table subject
(
    b_id int identity(1,1) not null primary key,
    b_name varchar(50)
)
--中间关系表
create table stu_sub
(
   t_id int identity(1,1) not null primary key,
   s_id int,
   b_id int
)
Stu.hbm.xml配置:
<hibernate-mapping>
    <class name="com.mengya.entity.Stu" table="stu" schema="dbo" catalog="mp">
        <id name="SId" type="java.lang.Integer">
            <column name="s_id" />
            <generator class="native" />
        </id>
        <property name="SName" type="java.lang.String">
            <column name="s_name" length="50" />
        </property>
        <property name="SSex" type="java.lang.String">
            <column name="s_sex" length="20" />
        </property>
        <!-- 集合名称为:subject,关系表为:stu_sub -->
        <set name="subject" table="stu_sub" inverse="false" cascade="save-update">
         <!-- 在多对多中的关系表中的s_id找到本对象 -->
         <key>
          <column name="s_id"></column>
         </key>
         <!-- 集合中放的对象是com.mengya.entity.Subject -->  
         <many-to-many class="com.mengya.entity.Subject">
         <!-- 在多对多中的关系表中的b_id找到com.mengya.entity.Subject对象 -->
          <column name="b_id"></column>
         </many-to-many>
        </set>
       
    </class>
</hibernate-mapping>
Subject.hbm.xml配置:
<hibernate-mapping>
 <class name="com.mengya.entity.Subject" table="subject" schema="dbo"
  catalog="mp">
  <id name="BId" type="java.lang.Integer">
   <column name="b_id" />
   <generator class="native" />
  </id>
  <property name="BName" type="java.lang.String">
   <column name="b_name" length="50" />
  </property>
  <!-- 集合名称为:stu,关系表为:stu_sub -->
  <set name="stu" table="stu_sub">
  <!-- 在多对多中的关系表中的b_id找到本对象 -->
   <key>
    <column name="b_id"></column>
   </key>
   <many-to-many class="com.mengya.entity.Stu">
<!-- 在多对多中的关系表中的s_id找到com.mengya.entity.Stu对象 -->
    <column name="s_id"></column>
   </many-to-many>
  </set>
  
 </class>
</hibernate-mapping>

测试:
public void save() {
  Stu stu1 = new Stu();
  Stu stu2 = new Stu();
  Subject sub1 = new Subject();
  Subject sub2 = new Subject();
  
  stu1.setSName("张明学");
  stu1.setSSex("男");
  
  stu2.setSName("张丹凤");
  stu2.setSSex("女");
  
  sub1.setBName("Java");
  
  sub2.setBName(".NET");
  
  /*
 * 这样添加是不对的,因为我在Stu.hbm.xml中配置是:inverse="false" cascade="save-update"
 * 表示stu对象对stu对象中的set集合里的对象,维护关联关系,并保持save-update操作
   */
//  sub1.getStu().add(stu1);
//  sub1.getStu().add(stu2);
//  
//  sub2.getStu().add(stu1);
//  sub2.getStu().add(stu2);
  
  /*
   * 故:stu对象集合中应封装sub对象
   */
  stu1.getSubject().add(sub1);
  stu1.getSubject().add(sub2);
  
  stu2.getSubject().add(sub2);
  
  /*
   * 在上面添加中,我们仅仅让学生维护了关系,即学生知道科目,科目不知道学习
 * 其实多对多中,只要让一方维护关系就可以了。多对多的关系维据中向中间表中插入数据,
   * 若双方都维护关系就中间表中的数据就有重复的了.
   */
  
  session=this.GetSession();
  tran=session.beginTransaction();
  session.save(stu1);
  session.save(stu2);
  tran.commit();
  session.close();
  
 }

 个人说明:多对多的查询效率很低,它会去查三张表,若数据量大的话,效率很低.所以数据量大的话不适合建立多对多的关系.

分享到:
评论

相关推荐

    hibernate多表联合查询

    ### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。...希望本文能对你理解Hibernate的多表联合查询有所帮助。

    hibernate关联映射详解

    包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。

    hibernate中一对多配置

    相对应地,多对一(Many-to-One)关系则是从多个实体指向一个单一实体的关联。理解这两种配置的区别对于进行高效的数据操作至关重要。 **一对多关系详解:** 在Hibernate中,一对多关系通常用在父类(拥有端)和...

    hibernate说明文档

    以上是对“hibernate说明文档”标题和描述中的关键知识点的详细介绍,旨在帮助读者深入了解Hibernate的工作原理及其应用场景。通过掌握这些核心概念和技术,开发者可以更加高效地使用Hibernate框架来处理复杂的...

    Hibernate 多数据库支持解决方案

    总之,为了实现Hibernate对多数据库的支持,需要精心设计和配置,以确保代码的可移植性,同时兼顾性能和数据一致性。以上各点提供了实现这一目标的基础,但实际项目中可能还需要解决更多特定于数据库的问题。通过...

    hibernate框架一对一测试案例

    **hibernate框架一对一关联测试案例详解** 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者能够用Java对象来处理数据。本篇我们将深入探讨Hibernate中的一对一...

    hibernate 一对多

    对于一对一或多对一,通常在"多"的一方添加对"一"的引用,而在"一"的一方则可以忽略,因为默认就已经存在了"多"的关系。 2. **@ManyToOne和@OneToMany注解**:如果使用注解方式,我们会在"多"的一方使用`@ManyToOne...

    hibernate anotation 处理一对多关系

    本文将以一个实例为依托,深入解析如何使用注解来设置一对多关系以及多对一关系的映射。 在Hibernate中,处理一对多关系主要使用`@OneToMany`和`@ManyToOne`注解。一个简单的例子通常包括两个实体类:一个“父”类...

    hibernate一对多(双向)有数据库说明

    - 在"老师"实体类中,使用`@OneToMany`注解来表示与"学生"的多对一关系,指定`mappedBy`属性为"学生"实体中的反向引用属性名,如`@OneToMany(mappedBy = "teacher")`。 - 在"学生"实体类中,使用`@ManyToOne`注解...

    Hibernate 注解说明文档

    **Hibernate 注解说明文档** 在Java的持久化框架中,Hibernate是备受青睐的一款,它极大地简化了数据库操作。本文档将深入探讨Hibernate注解的使用,帮助开发者更好地理解和利用这些注解来实现对象关系映射(ORM)...

    hibernate说明及demo的例子

    在这个“hibernate说明及demo的例子”中,我们将深入探讨Hibernate的核心概念和功能,并通过一个实际的示例来展示如何使用它。 一、Hibernate概述 Hibernate是一个强大的工具,它消除了JDBC代码的繁琐,提供了数据...

    Hibernate一对多映射

    在Java的持久化框架Hibernate中,一对多映射(One-to-Many Mapping)是一种常见的关系映射类型,它反映了数据库中表与表之间的关联关系。本文将深入探讨Hibernate一对多映射的概念、配置以及实现方式,并结合提供的...

    Hibernate说明

    3. 查询缓存:存储查询结果,减少对数据库的访问。 七、事务管理 Hibernate支持JTA(Java Transaction API)和JDBC事务,通过Transaction对象进行控制,保证数据的一致性和完整性。 八、高级特性 1. 异步操作:...

    Hibernate连接SQLite配置说明和方言代码

    Hibernate连接SQLite配置步骤: 1、添加SQLite库: 1.1、将两个jar包:com.zy.hibernate.dialect.SQLiteDialect.jar、sqlite-jdbc-3.7.2.jar拷贝到“\WEB-INF\lib”文件夹下; 2、配置hibernate: 2.1、将...

    Hibernate,hibernate笔记

    以下是对Hibernate的一些关键知识点的详细说明: 1. **异常处理**: 在描述中提到的`org.hibernate.PropertyValueException: not-null property references a null or transient value`是Hibernate抛出的一个常见...

    Hibernate 源代码及重要说明

    此压缩包“Hibernate01_源代码及重要说明”包含了Hibernate的源代码,以及相关的重要说明,旨在帮助开发者深入理解其工作原理。 **一、Hibernate 框架概述** 1. **对象关系映射(ORM)**: ORM是Hibernate的核心,...

    hibernate一对一的两种实现方式

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联是常见的关系映射类型,它用于表示两个实体之间一对一的关联关系。本篇将详细阐述Hibernate中一对一关联的两种实现方式:基于主键关联和基于外键关联,并...

    Hibernate表多对一关联说明和源码

    本篇文章将详细讲解Hibernate中的"多对一"关联,并通过具体的源码示例来帮助理解。同时,我们还将探讨如何在Spring框架中集成并测试这些关联。 **1. Hibernate中的多对一关联** 在数据库设计中,"多对一"关系表示...

    Hibernate 中文api 等学习资料

    5. **关联映射**:熟悉一对一、一对多、多对一、多对多等不同类型的关联映射配置。 6. **延迟加载和懒加载**:理解何时及如何使用这些特性来提高性能。 7. **实体生命周期**:了解Hibernate如何处理对象的创建、...

    hibernate全套资料文档API及配置说明文档

    **hibernate全套资料文档API及配置说明文档** 在Java世界中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它允许开发人员使用面向对象的编程方式来操作数据库,从而降低了数据库操作的复杂性。这个压缩包...

Global site tag (gtag.js) - Google Analytics