关系映射的双向关联的多对多

package org.fkjava.bean;

import java.util.Set;

/**
 * 多对多 双向 关联关系 配置
 *
 * @author hanfeili www.fkjava.org
 */
public class Address {
    private Integer id;
    /**
     * 邮政编码
     */
    private String codes;
    /**
     * 具体地址
     */
    private String des;

    private Set<Person> personSet;

    @Override
    public String toString() {
        return "Address [id=" + id + ", codes=" + codes + ", des=" + des + "]";
    }

    public String getCodes() {
        return codes;
    }

    public void setCodes(String codes) {
        this.codes = codes;
    }

    public String getDes() {
        return des;
    }

    public void setDes(String des) {
        this.des = des;
    }

    public Set<Person> getPersonSet() {
        return personSet;
    }

    public void setPersonSet(Set<Person> personSet) {
        this.personSet = personSet;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
}
-----------------------------------------------------------------------
package org.fkjava.bean;

import java.util.Date;
import java.util.Set;

/**
 * 多对多   双向 关联关系 配置
 *
 *
 * @author hanfeili
 *  www.fkjava.org
 */
public class Person {
    private Integer id;
    private String name;
    private int password;
    private Date birthday;

    //一个set集合保存多个地址引用
    private Set<Address> addressSet;

    public Person() {
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", password=" + password
                + ", birthday=" + birthday + "]";
    }

    public Set<Address> getAddressSet() {
        return addressSet;
    }

    public void setAddressSet(Set<Address> addressSet) {
        this.addressSet = addressSet;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPassword() {
        return password;
    }

    public void setPassword(int password) {
        this.password = password;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

}

配置文件

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<!-- 多对多 双向 关联关系 配置 -->

-<hibernate-mapping package="bean">

-<class table="t_person" name="Person">

-<id name="id">

<generator class="identity"/>

</id>

<property name="name"/>

<property name="password"/>

<property name="birthday"/>

<!-- table 指定一个中间表名 多对多的配置中中间表名要一致-->

-<set table="join_person_addrss" name="addressSet" inverse="true">

<!-- 在中间表中使用p_id 关联_person数据 -->

<key not-null="true" column="p_id"/>

<!-- 指定t_pseron表与t_address 的关联关系使用a_id 维护 -->

<many-to-many class="Address" column="a_id"/>

</set>

</class>

-<class table="t_address" name="Address">

-<id name="id">

<generator class="identity"/>

</id>

<property name="codes"/>

<property name="des"/>

-<set table="join_person_addrss" name="personSet">

<key not-null="true" column="a_id"/>

<many-to-many class="Person" column="p_id"/>

</set>

</class>

</hibernate-mapping>
时间: 2024-11-05 11:42:39

关系映射的双向关联的多对多的相关文章

关系映射的双向关联的多对一

package org.fkjava.bean; import java.util.Date; import java.util.Set; /** * 一对多 外键 双向 关联关系 配置 * 一个人 一个地址 * * @author hanfeili * www.fkjava.org */ public class Person { private Integer id; private String name; private int password; private Date birthd

【SSH进阶之路】Hibernate映射——一对一双向关联映射(六)

上篇博文[SSH进阶之路]Hibernate映射--一对一单向关联映射(五),我们介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身份证端加载人得信息.如图所示: 关键原因在于对象模型具有方向性: 单向:一端只能加载另一端,不能反过来. 双向:两端都可以加载另一端. 问题来了:如何我们想从身份证端(IdCard)加载人(Person),怎么办呢? 下面我们开始介绍一对一的双向关联映射. 映射原理 双向关联映射与单向关联映射的原理是一

Hibernate中用注解配置一对多双向关联和多对一单向关联

Hibernate中用注解配置一对多双向关联和多对一单向关联 Hibernate提供了Hibernate Annotations扩展包,使用注解完成映射.在Hibernate3.3之前,需单独下载注解开发包 配置持久化类 配置关联关系 下面我们先从多对一单向关联关系讲起,多对一单向关联就是在多的一方植入一的一方的主键作为外键,下面我们先进行初始配置, 在配置的过程中我们会遇到一个问题  就是无论用load还是get都不会出现延迟加载,那么我们应该如何设置为要延迟加载,这样做的好处是可以在用的时候

mybatis关系映射之一对多和多对一

一. 简介: 本实例使用顾客和订单的例子做说明: 一个顾客可以有多个订单, 一个订单只对应一个顾客 二. 例子: 1. 代码结构图: 2. 建表语句: CREATE DATABASE test; USE test; CREATE TABLE person( personId VARCHAR(36) PRIMARY KEY, personName VARCHAR(64), personAddress VARCHAR(128), personTel VARCHAR(11) ); CREATE TAB

Hibernate一对一双向关联映射

关键原因在于对象模型具有方向性: 单向:一端只能加载另一端,不能反过来. 双向:两端都可以加载另一端. 问题来了:如何我们想从身份证端(IdCard)加载人(Person),怎么办呢? 下面我们开始介绍一对一的双向关联映射. 映射原理 双向关联映射与单向关联映射的原理是一样的,双向关联映射并不影响存储,只影响加载.所以,双向关联映射和单向关联映射的关系模型是一样的即数据库的表结构是一样的,只是IdCard的实体类和配置文件(IdCard.hbm.xml)发生了一点点变化. 对象模型 从上图中可以

hibernate(四)一对多单向、多对一双向、自身双向关联

?经过前几篇文章的简略总结,主要认识了关于hibernate的基本认识,顺便认识了hibernate的简单的一个原理.具体参见 Hibernate (一)hibernate入门 Hibernate(二)hibernate原理简单实现对比JDBC hibernate(三)入门级--hibernate实例 从这篇文章开始就接触具体hibernate是如何来配置使用,更多的是一些细节的掌握.首先需要声明的是作者也是在诸多资料和工作学习中不断在更新自己关于知识的理解,难免出现一些在现阶段的主观认识和片面

【SSH进阶之路】Hibernate映射——一对多关联映射(七)

上上篇博文[SSH进阶之路]Hibernate映射--一对一单向关联映射(五),我们介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身份证端加载人得信息. 上篇博文[SSH进阶之路]Hibernate映射--一对一双向关联映射(六),双向关联映射解决了单向关联映射只能从一端加载信息的缺陷,当然,双向关联映射并不影响存储,只影响加载.下面我们开始今天的内容: 一对多关联映射 映射原理 一对多关联映射和多对一关联映射的映射原理是一致的,

一对一关系映射

hibernate提供了两种一对一关联关系的方式,按照外键映射和按照主键映射. 一对唯一外键关联映射是多对一关联映射的特例 可以采用标签,指定多的一端的unique=true,这样就限制了多的一端的多重性为一. 通过这种手段映射一对一唯一外键关联 采用主键不要加字段,采用外键是需要加字段的.一对一唯一外键关联其实就是多对一的一个特例,只是限制了unique=true 的含义就是在多的一端添加一个外键指向一的一端,不过这里要限制唯一性.这种情况下其实还是多对一映射. 二.hibernate一对一唯

浅谈Hibernate关系映射(2)

继上篇博客 一对一关系映射:一对一关联映射在实际生活中是比较常见的,如人与身份证的关系,通过人这个对象可以找到他相关的内容. 一对一单向(主键): 单向一对一主键关联,靠的是它们的主键相等,从Person中能看到IdCard,也就是把t_idCard中的主键拿过来当做t_Pseron的主键. 如图的线表示一个关联,在person中可以看见idcard.即在person中持有idCard的引用 person类的映射关系 <hibernate-mapping> <class name=&qu