`
Wind_ZhongGang
  • 浏览: 264097 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Hibernate ORM Many to Many

阅读更多

  探讨下Hibernate中对象间多对多的关联关系。以同学借阅图书为例,一个同学可以借阅多本图书,而一本图书可以被多个同学借阅。

  建议对于多对多的关系处理借助中间类,从数据库实现上就是说借助第三张表。当然具体需求具体分析,你也可以采用其他的策略。不过这里重点介绍这种方式。来看看实现吧。

  1.Student.java

 

package com.template.model;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: ZhongGang
 * Date: 11-7-20
 * Time: 下午9:31
 * To change this template use File | Settings | File Templates.
 */
public class Student {
    private Integer id;
    private String name;

    private List<Borrowed> borroweds;

    public Student() {
    }
}

 

 

  2.Student.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 default-access="field">

    <class name="com.template.model.Student" table="student">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property name="name" column="name" type="java.lang.String"/>

        <bag name="borroweds" table="borrowed">
            <key column="studentid"/>
            <one-to-many class="com.template.model.Borrowed"/>
        </bag>
    </class>

</hibernate-mapping>

 

  3.Book.java

 

package com.template.model;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: ZhongGang
 * Date: 11-7-20
 * Time: 下午9:31
 * To change this template use File | Settings | File Templates.
 */
public class Book {
    private Integer id;
    private String name;

    private List<Borrowed> borroweds;

    public Book() {
    }
}

 

  4.Book.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 default-access="field">

    <class name="com.template.model.Book" table="book">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property name="name" column="name" type="java.lang.String"/>

        <bag name="borroweds" table="borrowed">
            <key column="bookid"/>
            <one-to-many class="com.template.model.Borrowed"/>
        </bag>
    </class>

</hibernate-mapping>

 

  5.Borrowed.java

 

package com.template.model;

/**
 * Created by IntelliJ IDEA.
 * User: ZhongGang
 * Date: 11-7-20
 * Time: 下午9:31
 * To change this template use File | Settings | File Templates.
 */
public class Borrowed {
    private Integer id;
    private Student student;
    private Book book;

    public Borrowed() {
    }
}

 

  6.Borrowed.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 default-access="field">

    <class name="com.template.model.Borrowed" table="borrowed">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>

        <many-to-one name="book" class="com.template.model.Book" column="bookid"/>
        <many-to-one name="student" class="com.template.model.Student" column="studentid"/>
    </class>

</hibernate-mapping>

 

 

  Borrwed就是辅助中间类了,用于维护学生和书籍之间的多对多关系。借助中间类通过两个一对多的关联关系来实现多对多的关系,这样的好处是有助于以后的扩展。如果一个多对多的关联上又有多个属性的话,就有必要将关系抽象出来作为一个对象来处理了,使得程序结构清晰,也有助于编程和理解。

分享到:
评论
2 楼 zhangyu821227 2013-03-25  
我正好要做一个同样的问题,但我是要用注解方式来实现,还得改改。。。
1 楼 yaoyaozii 2011-10-26  
刚好遇到这个问题

相关推荐

    hibernate many-to-one(多对一)及 cascade(级联).doc

    ### Hibernate Many-to-One (多对一) 及 Cascade (级联) #### 一、Many-to-One(多对一) 在数据库设计中,实体之间的关系主要包括一对一、一对多、多对多等几种类型。而在ORM(对象关系映射)框架Hibernate中,...

    Hibernate Mapping Many-to-One 实例 内附源代码及附件下载

    本实例将详细讲解如何在Hibernate中实现Many-to-One关系映射,这是一种常见的数据库关联,表示一个实体可以与多个其他实体相关联。 在Many-to-One关系中,通常一个实体(如部门)可以有多个相关实体(如员工),而...

    Hibernate many-to-many

    "Hibernate many-to-many"指的是Hibernate中处理多对多关联关系的一种方式。多对多关系是两个实体类之间存在的一种复杂关联,比如学生和课程之间的关系,一个学生可以选修多门课程,一门课程也可以被多个学生选修。 ...

    Hibernate one to many(many to one) 配置

    标题"Hibernate one to many(many to one) 配置"涉及到的是关系型数据库在Java中的持久化框架Hibernate中的两种关联映射关系:一对一(One-to-One)和多对一(Many-to-One)。在数据库设计中,这种关系很常见,例如...

    Hibernate应用例子many-to-many

    本示例将详细讲解如何在Hibernate中实现多对多(many-to-many)的关系映射。 在数据库设计中,多对多关系是指两个实体之间存在多个关联,比如学生和课程的关系,一个学生可以选修多门课程,一门课程也可以被多个...

    hibernate_many2one

    除了基本的`&lt;many-to-one&gt;`映射外,Hibernate还支持多种映射策略,如`@ManyToOne`、`@JoinColumn`等注解,这些注解可以在实体类中直接使用,使得代码更加简洁明了。例如: ```java @ManyToOne(fetch = FetchType....

    Hibernate实现many-to-many的映射关系

    在本文中,我们将深入探讨如何使用Hibernate来实现多对多(many-to-many)的映射关系。 首先,多对多映射关系通常涉及到两个实体类之间的关联,例如在学生选课的例子中,学生(Student)和课程(Course)之间存在多...

    Hibernate之第3解之-hibernate_hibernate_many2one_1

    《深入理解Hibernate:第三解——Many-to-One关系映射实战》 在Java世界里,ORM(Object-Relational Mapping)框架的出现极大地简化了数据库与Java对象之间的交互,而Hibernate作为其中的佼佼者,更是备受开发者青睐...

    hibernate学习5之one-to-many双向关联.docx

    在Hibernate框架中,双向一对多关联映射是常见的对象关系映射(ORM)方式,用于在Java对象模型中表示数据库中的两个实体之间的多对一关系。在这个场景中,"一"端通常指的是一个实体可以拥有多个另一个实体的实例,而...

    hibernate 关联映射(一) many to one

    本篇文章将深入探讨Hibernate中的关联映射,特别是"Many to One"关系的映射。在数据库设计中,Many to One是一种常见的关系,即一个实体(表)可以与多个其他实体相关联,而另一个实体则只与一个实体相关联。 首先...

    Hibernate one-to-many-annotation

    在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相关联。本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`...

    hibernate one-to-many 单/双向关联映射配置心得

    本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...

    Hibernate的配置详解

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用Java对象来操作数据库,消除了手动编写SQL语句的需要。在本篇中,我们将深入探讨Hibernate的配置,特别是涉及一对一、一对多和多对多关系的配置。 ...

    hibernate_6映射关系之one2many.zip_hibernate

    在Java的持久化框架Hibernate中,`One-to-Many`映射关系是对象关系映射(ORM)中常见的一种关联类型。它表示一个实体("One"端)与多个其他实体("Many"端)之间的关系。例如,一个学生可以有多个课程,一个老师可以...

    day36 07-Hibernate抓取策略:many-to-one上的抓取策略

    今天我们要讨论的是Hibernate框架中的一个关键概念——抓取策略,特别是针对"many-to-one"关系的抓取策略。这篇博客将深入剖析这个主题,帮助你更好地理解和应用Hibernate。 Hibernate是Java领域中最流行的对象关系...

    Hibernate学生-课程-成绩表的例子(many2many)

    在这个“Hibernate学生-课程-成绩表的例子(many2many)”中,我们将探讨如何利用Hibernate处理多对多关联关系,以及相关源码和工具的使用。 多对多关联是数据库设计中常见的关系类型,它表示两个实体之间可以有多个...

    Hibernate基础学习源码

    Hibernate 是一个广泛使用的Java语言下的对象关系映射(ORM)框架,它允许开发人员将数据库操作与业务逻辑层解耦,使代码更加简洁、高效。本资源“Hibernate基础学习源码”提供了五个不同阶段的学习示例,分别命名为...

    hibernate_1700_one2many_many2one_bi_crud(5)

    标题中的“hibernate_1700_one2many_many2one_bi_crud(5)”指的是一项关于Hibernate框架的教程,重点在于介绍一对多(One-to-Many)和多对一(Many-to-One)双向关联关系的创建、读取、更新和删除(CRUD)操作。...

Global site tag (gtag.js) - Google Analytics