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

Hibernate ORM - 多对多双向连接表关联关系

阅读更多

  对于多对多的关联关系处理,一种方式是使用连接表来维持两者的多对多关联关系,也就是说除去两者在数据库中相应的数据表外,还会创建第三张表用来维护两者的多对多关联关系。

 

  一。Husband

 

package com.orm.model;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 10/18/11
 * Time: 3:23 PM
 */
public class Husband extends DomainObject {
    private String name;

    private List<Wife> wifes;

    public Husband(String name, List<Wife> wifes) {
        this.name = name;
        this.wifes = wifes;
    }

    public Husband(String name) {
        this.name = name;
    }
}

 

<?xml version="1.0" encoding="UTF-8"?>

<!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.orm.model.Husband" table="husband">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property name="name" column="name" type="java.lang.String"/>

        <bag name="wifes" table="couple" cascade="all">
            <key column="husbandid"/>
            <many-to-many column="wifeid" class="com.orm.model.Wife"/>
        </bag>
    </class>

</hibernate-mapping>

 

  二。Wife

 

package com.orm.model;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 10/18/11
 * Time: 3:23 PM
 */
public class Wife extends DomainObject{
    private String name;

    private List<Husband> husbands;

    public Wife(String name) {
        this.name = name;
    }

    public Wife(String name, List<Husband> husbands) {
        this.name = name;
        this.husbands = husbands;
    }
}

 

 

<?xml version="1.0" encoding="UTF-8"?>

<!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.orm.model.Wife" table="wife">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property name="name" column="name" type="java.lang.String"/>

        <bag name="husbands" table="couple" cascade="all">
            <key column="wifeid"/>
            <many-to-many column="husbandid" class="com.orm.model.Husband"/>
        </bag>
    </class>

</hibernate-mapping>

 

  三。测试代码

 

package com.orm;

import com.orm.model.Husband;
import com.orm.model.Wife;
import com.orm.service.CoupleService;
import junit.framework.TestCase;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 10/18/11
 * Time: 3:40 PM
 */
public class HibernateManyToManyTest extends TestCase {
    private CoupleService coupleService;

    @Override
    public void setUp() throws Exception {
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:testDataSource.xml");
        coupleService = (CoupleService) context.getBean("coupleService");
    }

    public void testManyToMany() throws Exception {
        Wife wife1 = new Wife("wife1");
        Wife wife2 = new Wife("wife2");
        Wife wife3 = new Wife("wife3");

        List<Wife> wifes = new ArrayList<Wife>();
        wifes.add(wife1);
        wifes.add(wife2);
        wifes.add(wife3);

        Husband husband = new Husband("husband", wifes);
        coupleService.saveOrUpdate(husband);

        Husband husband1 = new Husband("husband1");
        Husband husband2 = new Husband("husband2");
        Husband husband3 = new Husband("husband3");

        List<Husband> husbands = new ArrayList<Husband>();
        husbands.add(husband1);
        husbands.add(husband2);
        husbands.add(husband3);

        Wife wife = new Wife("wife", husbands);
        coupleService.saveOrUpdate(wife);
    }
}
 

  测试结果及截图

 

  

 

  

 

  


  附上源码以供参考

 

  • 大小: 38.1 KB
  • 大小: 15.6 KB
  • 大小: 12 KB
分享到:
评论

相关推荐

    Hibernate ORM - 一对多双向连接表关联关系

    “Hibernate ORM - 一对多双向连接表关联关系”这个标题指出我们要讨论的是Hibernate ORM框架中的一种特定数据库关联模型,即一对多的双向关联。在Hibernate中,ORM(对象关系映射)是一种技术,它允许我们用面向...

    Hibernate ORM - 多对多双向中间实体关联关系

    本文将深入探讨Hibernate ORM中的一个关键概念:多对多双向中间实体关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生之间的关联等。 首先,多对多关联意味着两个实体类之间存在多个...

    myeclipse试用小记----Hibernate多对一双向关联(2)

    在本篇【myeclipse试用小记----Hibernate多对一双向关联(2)】中,博主主要探讨了使用MyEclipse集成开发环境与Hibernate框架进行多对一双向关联的配置与实现。MyEclipse是Eclipse的一个强大扩展,特别适合Java Web...

    hibernate多对多双向关联

    "多对多双向关联"是Hibernate中一种关系映射类型,涉及两个实体类之间的复杂关联。在数据库设计中,多对多关系意味着一个实体可以与多个其他实体相关联,反之亦然。例如,学生可以选修多门课程,课程也可以被多名...

    Hibernate_实体关联关系映射--学习总结

    - **多对多连接表关联**:多对多关系通常通过一个连接表来实现,连接表中包含两个外键,分别指向相关联的两个实体的主键。 #### 映射关系的方向 - **单向关联**:实体间的关联关系只在一个实体中体现。 - **双向...

    hibernate 多表关联 中间表

    在处理多表关联时,Hibernate提供了一种高效且灵活的方法,尤其是当涉及到中间表的情况。中间表通常用于实现多对多(Many-to-Many)的关系,比如在一个用户和角色的关系中,一个用户可以有多个角色,一个角色也可以...

    hibernate5--3.映射关系

    在多对多关系中,Hibernate会自动处理连接表的插入和删除操作。添加用户到角色或反之,只需简单地添加或移除对象即可。查询时,可以通过`Set`接口获取相关联的对象集合。 二、一对多映射(One-to-Many) 一对多...

    HIBERNATE - 符合Java习惯的关系数据库持久化

    4. **多对多关联**:两个实体之间存在多对多的关系,通常需要通过关联表来实现。 #### 结论 Hibernate通过提供强大的对象关系映射功能,极大地简化了Java应用与数据库的交互过程,使得开发人员能够更加专注于业务...

    hibernate实体关联关系映射

    创建一个连接表来维护多对多的关联关系。 ##### 3. 外键双向关联 除了在一的一方定义关联外,还在多的一方增加反向导航。 ##### 4. 连接表双向关联 与连接表单向关联类似,但在双方都增加了反向导航。 #### 五...

    hibernate双向多对多关联映射(注解版)

    在这个“hibernate双向多对多关联映射(注解版)”的主题中,我们将深入探讨如何使用Hibernate的注解配置来处理数据库中的双向多对多关联关系。 首先,多对多关联在数据库设计中是指两个实体之间存在多个对应关系,...

    Hibernate-ORM.rar

    4. **多对多关联**:当两个实体之间存在多对多关系时,如学生和课程,通常需要一个中间表来存储连接。`@ManyToMany`注解和`@JoinTable`用来定义这种关系。 5. **继承映射**:Hibernate支持类的继承,如单一继承(`@...

    Hibernate关联映射

    类似于一对一的连接表关联,这里也是通过额外的连接表实现一对多关系。连接表会包含两个外键,一个指向父实体,另一个指向子实体。映射配置中,需要创建连接表实体,并使用 `many-to-one` 元素表示关联。 6. ...

    Hibernate many-to-many

    在Hibernate中,实现多对多关系通常涉及到中间表或关联表,这个表用来存储两个实体类之间的关联。在这个"Hibernate Cascade"示例中,我们可能会看到如何配置这种关系,并且通过级联操作来管理这些关联对象的生命周期...

    hibernate关联关系2

    - `@JoinTable`用于多对多关联,定义连接表及其列。 二、项目实践 该项目可能包含以下关键文件: - `pom.xml`:Maven项目配置文件,包含了Hibernate和MySQL驱动等依赖。 - `hibernate.cfg.xml`:Hibernate的配置...

    Hibernate Annotation 共享主键一对一双向关联

    在实际的项目开发中,我们经常遇到各种各样的关联关系,比如一对一、一对多、多对一、多对多等。本文将详细讲解“Hibernate Annotation 中的共享主键一对一双向关联”。 首先,我们需要理解什么是共享主键(Shared ...

    hibernate基于主外键的一对多/多对一关联

    总结起来,Hibernate中的一对多/多对一关联是通过主外键映射来实现的,通过注解和配置文件定义实体间的关联关系,利用懒加载或立即加载策略控制数据获取,同时要注意双向关联的维护和级联操作的设置,以确保数据的...

    hibernate 映射关系学习入门 多对多实体映射

    在Hibernate中,多对多关系通过中间表(也称为联接表或关联表)来实现,这个表包含来自两个表的外键。 三、配置多对多映射 在Hibernate中,配置多对多映射通常需要以下几个步骤: 1. **实体类定义**:为每个实体...

    Hibernate关联关系总结

    本篇文章将深入探讨Hibernate中的三种主要关联关系:一对一、一对多和多对多。 **一对一关联(One-to-One)** 一对一关联在现实生活中很常见,例如一个人只有一个身份证。在Hibernate中,这种关联可以通过`@...

Global site tag (gtag.js) - Google Analytics