`
sdustyongz
  • 浏览: 86120 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate 一对多外键双向关联

阅读更多
Hibernate 一对多外键双向关联

一、模型介绍

一个人(Person)对应多个地址(Address)。

二、实体(省略getter、setter方法)

public class Person1nfk_sx implements Serializable {
    private int personid;
    private String name;
    private int age;
    private Set addresses=new HashSet();

public class Address1nfk_sx implements Serializable {
    private int addressid;
    private String addressdetail;
    private Person1nfk_sx person1nfkSx;

三、表模型

mysql> desc person_1nfk_sx;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| personid | int(11)      | NO   | PRI | NULL    | auto_increment |
| name     | varchar(255) | YES  |     | NULL    |                |
| age      | int(11)      | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

mysql> desc address_1nfk_sx;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| addressid     | int(11)      | NO   | PRI | NULL    | auto_increment |
| addressdetail | varchar(255) | YES  |     | NULL    |                |
| personid      | int(11)      | NO   | MUL |         |                |
+---------------+--------------+------+-----+---------+----------------+

四、生成的SQL脚本

  /* Formatted on 2007/08/22 17:42 (QP5 v5.50) */
  CREATE TABLE `address_1nfk` (
    `addressid` int(11) NOT NULL auto_increment,
    `addressdetail` varchar(255) default NULL,
    `personid` int(11) default NULL,
    PRIMARY KEY  (`addressid`),
    KEY `FK9B93456DA6D6C1F5` (`personid`),
    CONSTRAINT `FK9B93456DA6D6C1F5` FOREIGN KEY (`personid`) REFERENCES `person_1nfk` (`personid`)
  ) ENGINE=InnoDB DEFAULT CHARSET=gbk;


  /* Formatted on 2007/08/22 17:42 (QP5 v5.50) */
  CREATE TABLE `person_1nfk` (
    `personid` int(11) NOT NULL auto_increment,
    `name` varchar(255) default NULL,
    `age` int(11) default NULL,
    PRIMARY KEY  (`personid`)
  ) ENGINE=InnoDB DEFAULT CHARSET=gbk;

五、映射方法

<hibernate-mapping>
    <class name="com.lavasoft.sx._1_n_fk.Person1nfk_sx" table="PERSON_1nfk_sx">
        <id name="personid">
            <generator class="identity"/>
        </id>
        <property name="name"/>
        <property name="age"/>
        <!--映射集合属性,关联到持久化类-->
        <set name="addresses" inverse="true" cascade="all">
            <!--column用于指定外键列名-->
            <key column="personid" not-null="true"/>
            <!--映射关联类-->
            <one-to-many class="com.lavasoft.sx._1_n_fk.Address1nfk_sx"/>
        </set>
    </class>
</hibernate-mapping>

<hibernate-mapping>
    <class name="com.lavasoft.sx._1_n_fk.Address1nfk_sx" table="ADDRESS_1nfk_sx">
        <id name="addressid">
            <generator class="identity"/>
        </id>
        <property name="addressdetail"/>
        <!--映射关联属性,column属性指定外键列名-->
        <many-to-one name="person1nfk"
                     class="com.lavasoft.sx._1_n_fk.Person1nfk_sx"
                     fetch="select"
                     cascade="save-update">
            <column name="personid" not-null="true"/>
        </many-to-one>
    </class>
</hibernate-mapping>

六、测试方法

public class Test_1nfk_sx {
    public static void main(String[] args){
        Address1nfk_sx add1=new Address1nfk_sx();
        Address1nfk_sx add2=new Address1nfk_sx();
        Person1nfk_sx p=new Person1nfk_sx();

        add1.setAddressdetail("郑州市经三路");
        add2.setAddressdetail("合肥市宿州路");
        p.setName("wang");
        p.setAge(30);

        p.getAddresses().add(add1);
        p.getAddresses().add(add2);
        add1.setPerson1nfk(p);
        add2.setPerson1nfk(p);

        Session session= HibernateUtil.getCurrentSession();
        Transaction tx=session.beginTransaction();
        session.save(p);
        session.saveOrUpdate(add1);
        session.saveOrUpdate(add2);
        tx.commit();
        HibernateUtil.closeSession();
    }
}

七、测试结果

1) :正常保存.
        session.save(p);
        session.saveOrUpdate(add1);
        session.saveOrUpdate(add2);

Hibernate: insert into PERSON_1nfk_sx (name, age) values (?, ?)
Hibernate: insert into ADDRESS_1nfk_sx (addressdetail, personid) values (?, ?)
Hibernate: insert into ADDRESS_1nfk_sx (addressdetail, personid) values (?, ?)




本文出自 “熔 岩” 博客,转载请与作者联系!
分享到:
评论

相关推荐

    Hibernate关联映射

    Hibernate 一对一外键单向关联 Hibernate 一对一主键单向关联 Hibernate 一对一连接表单向关联 Hibernate 一对多外键单向...Hibernate 一对多外键双向关联 Hibernate 一对多连接表双向关联 Hibernate 多对多双向关联

    Hibernate关联关系映射目录

    Hibernate关联关系映射 单向关联 │ ├─ 一对一外键单向关联 │ ├─ 一对一主键单向关联 │ ├─ 一对一连接表单向关联 ...├─ 一对多外键双向关联 ├─ 一对多连接表双向关联 └─ 多对多双向关联

    hibernate外键实现一对一双向关联关系源码

    hibernate外键实现一对一双向关联关系源码

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    在本文中,我们将详细介绍Hibernate一对一唯一外键关联映射的概念、配置方法和实践应用。 一对一唯一外键关联映射的概念 在Hibernate中,一对一唯一外键关联映射是指两个实体之间的关联关系,其中一个实体作为外键...

    Hibernate Annotation 基于外键的一对多双向关联

    NULL 博文链接:https://paladin1988.iteye.com/blog/1657564

    Hibernate一对一双向外键关联(annotation/xml)

    NULL 博文链接:https://cdxs2.iteye.com/blog/1930749

    Hibernate一对多关联双向关联代码实现分享

    本篇将详细讲解如何在Hibernate中实现一对多的双向关联,并提供相关的代码示例。 在关系型数据库中,一对多关联是指一个表的记录可以对应另一个表的多个记录。在Hibernate中,这种关系可以通过在实体类和映射文件中...

    hibernate学习笔记

    hibernate一对多双向自连接关联映射 15 hibernate多对多关联映射(单向User----&gt;Role) 19 hibernate多对多关联映射(双向User&lt;----&gt;Role) 20 Hibernate的继承关系 21 每棵继承树映射成一张表(hibernate_extends_1) 22 ...

    hibernate一对多关联映射学习小结

    Hibernate一对多关联映射学习小结 Hibernate是一种流行的Java持久层框架,它提供了强大的对象关系映射(ORM)功能,能够将Java对象与关系数据库中表之间建立映射关系。Hibernate的关联映射是其核心功能之一,可以将...

    Hibernate学习笔记

    015 一对多关联映射 双向 016 多对多关联映射 单向 017 多对多关联映射 双向 018 关联映射文件中标签中的 lazy(懒加载)属性 019 关联映射文件中集合标签中的 lazy(懒加载)属性 020 、单端关联上的 lazy(懒加载)属性 ...

    hibernate的关联关系映射

    此外,多对一关联实际上与一对多关联非常类似,唯一的区别在于外键的方向。在实际应用中,这种关联经常用于表示一个教师有多门课程,但每门课程只有一个任教教师。 总结来说,Hibernate的关联关系映射允许开发者...

    Hibernate_Annotation关联映射

    使用@OneToMany批注可定义一对多关联,一对多关联可以是双向关联。 在EJB3规范中多对一这端几乎总是双向关联中的主体(owner)端,而一对多这端关联批注为@OneToMany(mappedBy...) @Entity Public class Troop{ @...

    hibernate学习5之one-to-many双向关联.docx

    在Hibernate框架中,双向一对多关联映射是常见的对象关系映射(ORM)方式,用于在Java对象模型中表示数据库中的两个实体之间的多对一关系。在这个场景中,"一"端通常指的是一个实体可以拥有多个另一个实体的实例,而...

    Hibernate一对多映射配置详解

    以下是对Hibernate一对多映射配置的详解: 一、XML文件配置 1. 单向关联 在这种配置中,关系只在一个方向上定义,例如User类有多个Account。在User的配置文件中,不直接声明与Account的关联,而是在Account的配置...

    Java的Hibernate框架中一对多的单向和双向关联映射

    本文将详细讲解一对多的单向和双向关联映射。 首先,我们来看**一对多单向关联映射**。在这个关系中,一方(如班级)知道另一方(如学生),但另一方并不知道这一方。在对象模型中,这通常表现为一个类(如Classes...

    Hibernate学习笔记_songjignhao_1

    自己记录的学习笔记,内容很详细,有代码,包括:一对多双向关联关系、一对多双向自身关联关系、一对一关联关系(主键关联、外键关联)、一对多与一对一结合、多对多关联关系、Map、Set、List与Bag映射关系、查询...

    hibernate 关系注解

    在Hibernate中,关系注解用于在实体类中定义不同类型的数据库关系,如一对一、一对多、多对多等。以下是关于Hibernate关系注解的详细说明: 1. **一对一外键关联映射(单向)** 使用`@OneToOne`注解实现一对一关系...

    hibernate的关联映射

    - 这种关联实际上是一对多关联的反向视角,配置方式与一对多的单向关联类似,只是角色互换。 4. **多对多关联映射** - **中间表关联**:多对多关联通常需要一个中间表来存储两个实体的连接信息。在映射文件中,...

    Hibernate 注解映射

    Hibernate 注解映射支持多种关联关系的映射,包括多对一、一对多、双向一对多和双向一对一。 * 多对一映射:使用 @ManyToOne 和 @JoinColumn 注解,指定关联列。 * 一对多映射:使用 @OneToMany 注解,默认会使用...

    Hibernate数据关联技术笔记

    1:N(一对多)关联表示一个实体可以与多个其他实体相对应,例如一个部门可以有多个员工。在Hibernate中,通常使用`&lt;set&gt;`或`&lt;list&gt;`标签来表示这种关系。不过,示例中并未展示1:N的具体实现,但在实际应用中,可以为...

Global site tag (gtag.js) - Google Analytics