`
Wind_ZhongGang
  • 浏览: 259050 次
  • 性别: 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-examples:Hibernate关联,Hibernate搜索和Hibernate集成

    Hibernate ORM使开发人员可以更轻松地编写其数据在应用程序进程中无法使用的应用程序。 作为ORM框架,hibernate涉及数据持久性,因为它适用于关系数据库。 在此存储库中,您将找到用于理解诸如关系映射的示例。 1...

    Hibernate Recipes(Apress,2ed,2015)

    There are many books focused on learning Hibernate, but this book takes you further and shows how you can apply it practically in your daily work. Hibernate Recipes, Second Edition is a must have ...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    7.1.1 [many-to-one]元素的not-null属性 153 7.1.2 级联保存和更新 155 7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子关系 164 7.3 映射一对多双向自身...

    精通Hibernate:对象持久化技术第二版part3

    7.1.1 [many-to-one]元素的not-null属性 153 7.1.2 级联保存和更新 155 7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子关系 164 7.3 映射一对多双向自身...

    Pro JPA 2 Mastering the Java Persistence API free down

    JPA2.0 加入了大量必须的 ORM 映射增强特性,包括:支持通过使用 @ElementCollection 标注来增强 collections, maps 和 lists( 这里不是指实体之间的关联关系 ) 集合,支持 map 的单向 one-to-many 关联 (JPA1.0...

    jpa-hibernate-tutorials:带有Spring Boot和Spring-Data-JPA的Hibernate教程

    Spring Boot和JPA的Hibernate教程和演示

    spring5webapp:简单的Web应用程序

    many-to-many relationship JPA实体放在称为“域或模型”的程序包中。 JPA需要零arg构造函数 JPA是一种ORM(对象关系映射)工具,有时在映射中存在“泄漏”。 平等 等于和哈希码 Spring数据仓库 Spring Data JPA...

    Spring面试题

    类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、 4. 说下Hibernate的缓存...

    Android代码-Lucee

    SOAP, HTTP), ORM (Hibernate), searching (Lucene), datasources (MSSQl, Oracle, MySQL and others), caching (infinispan, ehcache, and memcached) and many more. Lucee provides a compatibility layer for ...

    Java学习笔记-个人整理的

    {1.9.6}go-to}{33}{subsection.1.9.6} {1.9.7}\texttt {do-while}}{33}{subsection.1.9.7} {1.10}数组(array)}{34}{section.1.10} {1.10.1}数组变量的声明}{34}{subsection.1.10.1} {1.10.2}数组变量的初始化...

    jdbc基础和参考

    many-to-one:标签中对于cascade的取值delete,delete-orphan,all-delete-orphan(只用unique属性值不为true不能出现)慎用 cascade:级联属性 none:不做任何级联操作 save-update:对当前对象执行save,update, ...

    Java面试宝典2010版

    如何书写一个 one to many 配置文件. 11、iBatis与Hibernate有什么不同? 12、写Hibernate的一对多和多对一双向关联的orm配置? 9、hibernate的inverse属性的作用? 13、在DAO中如何体现DAO设计模式? 14、spring+...

    最新Java面试宝典pdf版

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    Java面试笔试资料大全

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    JAVA面试宝典2010

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    Java面试宝典-经典

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    java面试题大全(2012版)

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    Java面试宝典2012版

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计...

    java面试宝典2012

    如何书写一个 one to many 配置文件. 133 11、iBatis与Hibernate有什么不同? 133 12、写Hibernate的一对多和多对一双向关联的orm配置? 134 9、hibernate的inverse属性的作用? 134 13、在DAO中如何体现DAO设计模式? ...

Global site tag (gtag.js) - Google Analytics