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

Hibernate one-to-many 双方双向连接表关联

阅读更多


  Hibernate中持久化实体间一对多关联,具体关联关系为多方,单向,连接表关联。

 

  一。Husband

 

package com.dream.model.couple;

import java.util.Set;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 10/17/11
 * Time: 1:06 PM
 */
public class Husband extends DomainObject {
    private String name;
    private Set<Wife> wifes;

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

    public Husband() {
    }

    public String name() {
        return name;
    }

    public Set<Wife> wifes() {
        return this.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.dream.model.couple.Husband" table="husband" dynamic-insert="true" dynamic-update="true">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <version name="version" column="version" type="java.lang.Integer"/>
        <property name="name" column="name" type="java.lang.String"/>

        <set name="wifes" table="couple" cascade="all" lazy="false">
            <key column="husbandid"/>
            <many-to-many column="wifeid" class="com.dream.model.couple.Wife" unique="true"/>
        </set>
    </class>

</hibernate-mapping>

 

  二。Wife

 

package com.dream.model.couple;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 10/17/11
 * Time: 1:06 PM
 */
public class Wife extends DomainObject {
    private String name;
    private Husband husband;

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

    public Wife() {
    }
}

 

<?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.dream.model.couple.Wife" table="wife" dynamic-insert="true" dynamic-update="true">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <version name="version" column="version" type="java.lang.Integer"/>
        <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.dream.model.couple.Husband"/>
        </join>
    </class>

</hibernate-mapping>

 

   三。Test

 

package com.dream.couple;

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

import java.util.HashSet;
import java.util.Set;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 10/17/11
 * Time: 1:31 PM
 */
public class HibernateOneToManyJoinTest 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 testOneToManyDoubleDirectionJoin() throws Exception {
        Wife wife1 = new Wife("wife1");
        Wife wife2 = new Wife("wife2");
        Wife wife3 = new Wife("wife3");

        Set<Wife> wifes = new HashSet<Wife>();
        wifes.add(wife1);
        wifes.add(wife2);
        wifes.add(wife3);

        Husband husband = new Husband("husband", wifes);

        coupleService.saveOrUpdate(husband);
    }
}

 

  跑完测试,发出的sql语句

 

  result1

 

  来看看跑完测试后,数据库中相关的数据表及数据:

 

  result2

 

  result3


 

  • 大小: 19.9 KB
  • 大小: 17.8 KB
  • 大小: 12 KB
分享到:
评论

相关推荐

    hibernate5--3.映射关系

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

    Hibernate性能调优

    关联通常包括以下几种类型:单向`one-to-many`关联、双向`one-to-many`关联、`many-to-one`关联以及`one-to-one`关联。 ##### 单向`one-to-many`关联 - **定义**:单向`one-to-many`关联是指一个实体可以拥有多个...

    hibernate的关联映射

    关联映射主要包括四种类型:一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)。下面我们将逐一探讨这些关联映射的配置方法。 1. **一对一关联映射** - **主键关联**...

    hibernate 多表关联 中间表

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

    Hibernate关联映射

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

    Hibernate关联关系映射目录

    -- 用来映射关联PO,必须为one-to-one元素增加constrained="true"属性 --&gt; &lt;one-to-one name="address" constrained="true"/&gt; &lt;/hibernate-mapping&gt; ``` --- ##### 3. 一对一连接表单向关联 在一对一连接表单...

    hibernate实体关联关系映射

    2. **一对多关联**(One-to-Many / Many-to-One) - 外键单向关联 - 连接表单向关联 - 外键双向关联 - 连接表双向关联 3. **多对多关联**(Many-to-Many) - 单向关联 - 双向关联 每种关联类型都有其特定的...

    HIbernate关联关系总结

    如果是通过连接表实现1-N关联,我们需要使用`&lt;many-to-many&gt;`标签,并设置`unique=true`来限制一对多的关系。连接表的配置需要在`&lt;set&gt;`标签中指定`table`属性。 **优点**:1端可以方便地管理和操作N端的所有对象...

    hibernate数据关联

    - 使用`&lt;one-to-many&gt;`或`&lt;many-to-one&gt;`标签来表示多对一的关系。 ```xml &lt;!-- 多对一关系配置 --&gt; &lt;many-to-one name="room" class="com.example.Room" column="room_id" cascade="save-update"/&gt; ...

    hibernate关联映射

    在Person类中添加`private Address address`属性,并在`person.hbm.xml`中配置`&lt;many-to-one&gt;`元素,如`&lt;many-to-one name="address" cascade="all" class="Address" column="address_id"/&gt;`。这表示Person表中的...

    Hibernate关联关系总结

    **一对多关联(One-to-Many)** 在一对多关联中,一个实体可以与多个其他实体相关联,比如一个部门有多名员工。这种关联可以通过`@OneToMany`注解来建立。关联的配置可以是集合类型,如List、Set等。为了优化性能,...

    Hibernate中的关联映射

    &lt;many-to-one name="address" class="Address" column="address_id"/&gt; ``` - **基于PK**:同样只有一方包含了另一方的引用关联实体属性,但这里通过使用外键作为主键的一部分来实现。 - **映射示例**: ```xml ...

    Hibernate5.0.7的dtd约束

    此外,还有`&lt;many-to-one&gt;`、`&lt;one-to-many&gt;`、`&lt;many-to-many&gt;`等元素,用于处理多对一、一对多和多对多的关系。 在实际开发中,正确理解和使用这些DTD约束至关重要。例如,如果不正确地设置了`&lt;property&gt;`的`type...

    hibrenate xml 配置 映射

    当两个实体通过第三方连接表关联时,可以使用`&lt;join&gt;`标签。连接表通常包含双方主键作为外键。 ```xml &lt;one-to-one name="address" class="com.example.Address" column="address_id"/&gt; ``` #### 2.1.4 一对...

    hibernate_reference中文文档.pdf

    - **7.5.3 多对多 (many-to-many)**:解释使用连接表的双向多对多关联映射。 - **7.6 更复杂的关联映射**:探讨更复杂的关联映射场景。 #### 8. 组件 (Component) 映射 这部分讲述了 Hibernate 中组件映射的技术...

    Hibernate数据关联实现〖MVSN〗_Struts + DAO + Hibernate

    在Hibernate中,数据关联分为一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)四种类型。每种关联都需要在实体类(Entity)上通过注解进行配置,例如: 1. **一对一...

    HibernateAPI中文版.chm

    6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted collections) 6.3.2. 双向关联(Bidirectional associations) 6.3.3. 双向关联...

Global site tag (gtag.js) - Google Analytics