`
Wind_ZhongGang
  • 浏览: 262739 次
  • 性别: 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;
    }
}

 

<?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;

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

    private Husband husband;

    public Wife(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.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"/>

        <join table="couple" optional="true">
            <key column="wifeid"/>
            <many-to-one name="husband" column="husbandid" class="com.orm.model.Husband"/>
        </join>
    </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 HibernateOneToManyTest 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 testOneToOne() 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);
    }
}

 

  测试结果及截图

 

  sql

 

  table

 

  data

 

  这是一个一对多的双向连接表关联关系,如果想要实现单向的连接表关联关系,那么需要在删除对方引用的同时,删除其配置文件中的join或集合元素。附上源代码以供参考。

 

  • 大小: 19 KB
  • 大小: 16.5 KB
  • 大小: 11.3 KB
分享到:
评论

相关推荐

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

    本文将深入探讨Hibernate ORM中的一个关键概念——多对多双向连接表关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生等例子,都需要用到多对多的关系来描述它们之间的复杂联系。 首先...

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

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

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

    首先,我们需要了解在Hibernate中多对一和一对多关联的概念。多对一关联意味着在数据库中,一个实体(表)可以与多个其他实体相关联,而在这些其他实体中,每个实体最多只能与一个原实体关联。例如,一个部门可以有...

    hibernate多对多双向关联

    10. **最佳实践**:如避免过多的中间表查询,合理设计关联关系,以及在不必要时选择一对一或一对多替代多对多等。 总结来说,理解并能正确使用Hibernate中的多对多双向关联是Java开发中的重要技能,涉及到实体设计...

    hibernate 多表关联 中间表

    首先,我们需要理解Hibernate中的两种主要关联类型:一对一(One-to-One)和一对多(One-to-Many)。而多对多关系是通过在两个参与实体之间创建一个额外的中间表来实现的,这个中间表通常包含两个外键,分别指向原表...

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

    - **一对多连接表关联**:通过一个连接表来建立一对多的关联关系。 3. **多对多关联**: - **多对多连接表关联**:多对多关系通常通过一个连接表来实现,连接表中包含两个外键,分别指向相关联的两个实体的主键。...

    hibernate5--3.映射关系

    本文将深入探讨Hibernate5中的映射关系,主要包括多对多(Many-to-Many)和一对多(One-to-Many)这两种关系。 一、多对多映射(Many-to-Many) 多对多关系在数据库中表现为两个表之间存在多个连接记录,而在对象...

    Hibernate关联映射

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

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

    2. **集合映射**:通过一对多、多对一、多对多等关联关系,将集合属性与数据库表建立联系。 3. **排序集合**:对于需要按特定顺序存储的集合,可以使用排序集合(Sorted Collection)。 4. **双向关联**:在实体类...

    hibernate关联关系2

    在这个项目中,我们将重点探讨Hibernate中的一对多关联关系,并结合MySQL数据库进行实践。 一、Hibernate一对多关联关系 在关系型数据库中,一对多关联是指一个表中的记录可以与另一个表中的多个记录相关联。例如,...

    Hibernate-ORM.rar

    3. **一对多关联**:例如,一个部门可以有多个员工,这可以通过在部门类上使用`@OneToMany`注解和在员工类上使用`@ManyToOne`注解来建立。`@JoinColumn`或`@JoinTable`用于指定关系。 4. **多对多关联**:当两个...

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

    一对多关联是指在数据库中,一个表的记录可以与另一个表中的多个记录相关联,这种关系在Hibernate中通过`@OneToMany`注解来表示。例如,一个用户可以有多个订单,那么用户实体(User)与订单实体(Order)之间就存在...

    hibernate实例(一对多,多对一)

    在这个“hibernate实例(一对多,多对一)”的主题中,我们将深入探讨两种重要的关联关系:一对一(One-to-One)和一对多(One-to-Many)。 **一对一关联(One-to-One)** 在一对一关联中,一个实体与另一个实体之间...

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

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

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

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

    Hibernate关于注解的一对多,多对多,一对一

    本篇文章将深入探讨Hibernate中注解的一对多、多对多和一对一关系映射。 ### 一对多关系 在现实生活中,例如一个班级有一个班主任,而班主任可以管理多个学生,这就是典型的“一对多”关系。在Hibernate中,我们...

    Hibernate many-to-many

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

Global site tag (gtag.js) - Google Analytics