`
Wind_ZhongGang
  • 浏览: 260563 次
  • 性别: 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"/>
            <composite-element class="com.orm.model.Wife">
                <parent name="husband"/>
                <property name="name" column="name" type="java.lang.String"/>
            </composite-element>
        </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 {
    private String name;

    private Husband husband;

    public Wife() {
    }

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

    public Husband getHusband() {
        return husband;
    }

    public void setHusband(Husband husband) {
        this.husband = husband;
    }
}

 

  三。测试代码

 

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 testOneToMany() 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

 

  这是一个典型的一对多双向组合关联关系,重点在于通过composite-element元素来实现,它将其一方中的多方元素视为其组成的一部分,对于多方来说没有相应的配置文件及数据表,而是由两者的连接表来表征其多方的数据及维持两者一对多的关联关系。附源码以供参考。

  • 大小: 11.3 KB
  • 大小: 17.9 KB
分享到:
评论

相关推荐

    Hibernate ORM - 一对多双向关联关系

    NULL 博文链接:https://dreamzhong.iteye.com/blog/1200915

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

    NULL 博文链接:https://dreamzhong.iteye.com/blog/1201437

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

    Hibernate 实体关联关系映射 学习总结 把一对一 一对多 单向 双向 主键 外键 链接表等讲的比较清楚

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     7.2 映射一对多双向关联关系  7.2.1 元素的inverse属性  7.2.2 级联删除  7.2.3 父子关系  7.3 映射一对多双向自身关联关系  7.4 改进持久化类  7.5 小结  7.6 思考题 第8章 通过Hibernate操纵对象(上) ...

    eshop1.0(ssh电子商城)

    8.配置会员到订单的一对多双向关联关系 9.配置会员到留言的一对多单向关联关系 10.配置管理员到留言的一对多单向关联关系 11.配置会员到购物车的一对多单向关联关系 12.配置订单到购物车的一对一单向关联关系 13....

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

    7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子关系 164 7.3 映射一对多双向自身关联关系 165 7.4 改进持久化类 171 7.5 小结 175 7.6 思考题 176 第8章 ...

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

    7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子关系 164 7.3 映射一对多双向自身关联关系 165 7.4 改进持久化类 171 7.5 小结 175 7.6 思考题 176 第8章 ...

    Hibernate实战(第2版 中文高清版)

     7.2.1 一对多关联   7.2.2 多对多关联   7.2.3 把列添加到联结表   7.2.4 映射map   7.3 多态关联   7.3.1 多态的多对一关联   7.3.2 多态集合   7.3.3 对联合的多态关联   7.3.4 每个具体类一张...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     7.2 映射一对多双向关联关系  7.2.1 元素的inverse属性  7.2.2 级联删除  7.2.3 父子关系  7.3 映射一对多双向自身关联关系  7.4 改进持久化类  7.5 小结  7.6 思考题 第8章 通过Hibernate操纵对象(上) ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     7.2 映射一对多双向关联关系  7.2.1 元素的inverse属性  7.2.2 级联删除  7.2.3 父子关系  7.3 映射一对多双向自身关联关系  7.4 改进持久化类  7.5 小结  7.6 思考题 第8章 通过Hibernate操纵对象(上) ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     7.2 映射一对多双向关联关系  7.2.1 元素的inverse属性  7.2.2 级联删除  7.2.3 父子关系  7.3 映射一对多双向自身关联关系  7.4 改进持久化类  7.5 小结  7.6 思考题 第8章 通过Hibernate操纵对象(上) ...

    jdbc基础和参考

    一般在做双向多对一(一对多)关联关系映射的时候,一般会设置让一的一方放弃对关联关系的维护,以减少不必要的更新语句 一对一: 基于外键的一对一 Wife Husband id id name name h_id references Husband...

    低清版 大型门户网站是这样炼成的.pdf

    4.3.6 映射一对多双向关联关系 239 4.3.7 映射一对多双向自身关联关系 244 4.3.8 映射多对多单向关联关系 247 4.3.9 映射多对多双向关联关系 252 4.3.10 映射组成关系 256 4.3.11 映射继承关系 260 4.3.12 ...

    Spring面试题

    1.使用双向一对多关联,不使用单向一对多 2.灵活使用单向一对多关联 3.不用一对一,用多对一取代 4.配置对象缓存,不使用集合缓存 5.一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表...

    Java面试宝典-经典

    12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.5.9 对关联实体进行排序 424 10.6 继承关系映射 426 10.6.1 整个类层次对应一张表的 映射策略 427 10.6.2 连接子类的映射策略 430 10.6.3 每个具体类对应一张表的 映射策略 434 10.7 使用抽象实体和非实体父类 ...

    最新Java面试宝典pdf版

    12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...

Global site tag (gtag.js) - Google Analytics