`
mrzhangtufu
  • 浏览: 61935 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate 3多对多单向连接表关联简单示例

阅读更多

多对多单向连接表关联:只要一个端有Set就可以了,在<set>的属性中指明POJO中的Set集合,对应的链接表名,子元素<key>声明本端对应的连接表中的主键,<many-to-many>声明对应的连接表中的另一端的主键及其对应的POJO类。

示例:
一个Person可以有多个Address,一个Address也可以有多个Person

POJO如下:
public class Addressnn implements java.io.Serializable{
    private int addressid;
    private String addressdetail;

    public Addressnn(){

    }
    public Addressnn(String addressdetail){
        this.addressdetail=addressdetail;
    }

    public void setAddressid(int addressid){
        this.addressid=addressid;
    }
    public int getAddressid(){
        return this.addressid;
    }

    public void setAddressdetail(String addressdetail){
        this.addressdetail=addressdetail;
    }
    public String getAddressdetail(){
        return this.addressdetail;
    }
}

 

public class Personnn implements java.io.Serializable{
    private int personid;
    private String name;
    private int age;
    private java.util.Set addresses=new java.util.HashSet();

    public void setPersonid(int personid){
        this.personid=personid;
    }
    public int getPersonid(){
        return this.personid;
    }
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return this.name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return this.age;
    }

    public void setAddresses(java.util.Set addresses){
        this.addresses = addresses;
    }
    public void addAddress(Addressnn ad){
        this.getAddresses().add(ad);
    }
    public java.util.Set getAddresses(){
        return this.addresses;
    }
}

hbm.xml如下:
<!--Personnn.hbm.xml-->
<hibernate-mapping>
    <class name="com.Personnn" table="person_nn">
        <id column="personid" name="personid" type="int">
            <generator class="native"/>
        </id>
        <property name="name" column="name" type="string"/>
        <property name="age" column="age" type="int"/>
         <!--映射集合属性,join_nn是连接表表名-->
         <set name="addresses" table="join_nn">
             <key column="personid"/>
             <many-to-many column="addressid" class="com.Addressnn"/>
         </set>
    </class>
</hibernate-mapping>

<!--Addressnn.hbm.xml-->
<hibernate-mapping>
    <class name="com.Addressnn" table="address_nn">
        <id column="addressid" name="addressid" type="int">
            <generator class="native"/>
        </id>
        <property name="addressdetail" column="addressdetail" type="string"/>
    </class>
</hibernate-mapping>

数据库表如下:
mysql> desc person_nn;
 
+----------+--------------+------+-----+---------+----------------+
 
| 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 join_nn;
 
+-----------+---------+------+-----+---------+-------+
 
| Field     | Type    | Null | Key | Default | Extra |
 
+-----------+---------+------+-----+---------+-------+
 
| personid  | int(11) | NO   | PRI |         |       |
 
| addressid | int(11) | NO   | PRI |         |       |
 
+-----------+---------+------+-----+---------+-------+
 
 
 
mysql> desc person_nn;
 
+----------+--------------+------+-----+---------+----------------+
 
| Field    | Type         | Null | Key | Default | Extra          |
 
+----------+--------------+------+-----+---------+----------------+
 
| personid | int(11)      | NO   | PRI | NULL    | auto_increment |
 
| name     | varchar(255) | YES  |     | NULL    |                |
 
| age      | int(11)      | YES  |     | NULL    |                |
 
+----------+--------------+------+-----+---------+----------------+
 

main测试:

public class Test_nn {
    public static void main(String args[]){
        Addressnn add1=new Addressnn();
        Addressnn add2=new Addressnn();
        Addressnn add3=new Addressnn();
        Personnn p1=new Personnn();
        Personnn p2=new Personnn();

        add1.setAddressdetail("郑州市经三路");
        add2.setAddressdetail("合肥市宿州路");
        add3.setAddressdetail("北京市长安路");
        p1.setName("wang");
        p1.setAge(30);
        p2.setName("lee");
        p2.setAge(50);

        p1.getAddresses().add(add1);
        p1.getAddresses().add(add2);
        p2.getAddresses().add(add2);
        p2.getAddresses().add(add3);

        Session session=HibernateUtil.getSession();
        Transaction t=session.beginTransaction();
        session.save(add1);
        session.save(add2);
        session.save(add3);
        session.save(p2);
        session.save(p1);
        t.commit();

        HibernateUtil.closeSession();
    }
}

 

1
0
分享到:
评论
1 楼 zan2222 2010-09-15  
                   

相关推荐

    Hibernate Annotation 基于连接表的单向一对多关联

    本篇文章将详细讲解如何利用Hibernate的注解实现基于连接表的单向一对多关联。 首先,理解一对多关联:在数据库设计中,一对多关联意味着一个实体(表)可以与多个其他实体(表)相对应。例如,一个学生可以有多个...

    hibernate多对多单向关联

    本文将深入探讨Hibernate中的多对多单向关联,并结合提供的资源`hibernate_many2many_1`进行详细解析。 在数据库设计中,多对多关系意味着一个实体可以与多个其他实体相关联,反之亦然。例如,学生和课程之间的关系...

    hibernate多对多关联映射(单项关联)

    总的来说,这篇博客和相关代码示例为开发者提供了一个理解和实现Hibernate中多对多单向关联的起点,帮助他们更好地处理复杂的数据库关系映射。学习和实践这部分内容对于提升Java后端开发能力,特别是使用Hibernate...

    Hibernate一对一单向外键关联 (联合主键annotation)

    本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的注解配置。 首先,一对一关联可以分为两种类型:单向和双向。在单向一对一关联中,只有一个实体知道另一个实体的存在,而另一...

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

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

    Hibernate 一对一,一对多,多对多例子

    3. **多对多关联(Many-to-Many)**:多对多关联需要一个中间表来存储双方的关联信息,可以使用`@ManyToMany`注解,同时通过`@JoinTable`定义连接表的详细信息,包括连接字段和关联实体的引用。多对多关联的集合通常...

    Hibernate关联关系映射目录

    在多对多单向关联中,两个实体之间可以相互关联,这种关联通常通过第三个表(连接表或关联表)来实现。 **表结构示例**: - **Student表**: - `studentid`: 主键 - `name`: 姓名 - `age`: 年龄 - **Course表**:...

    Hibernate中的关联映射

    根据描述,本文将详细介绍Hibernate中的各种映射关系,包括单向和双向的关联,以及不同类型的关联方式如一对一、一对多、多对多等,以帮助初学者更好地理解和应用这些概念。 #### 二、关联映射类型 ##### 2.1 单向...

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

    3. **多对一关联**:与一对多关联相反,使用`@ManyToOne`注解,多的一方没有`mappedBy`,而是直接引用一的一方。 4. **多对多关联**:使用`@ManyToMany`,需要一个中间表来存储两个实体类的关联关系,可以通过`@...

    Hibernate 3.x 参考手册

    - 示例:`Person` 与 `Address` 之间的一对多关联。 - **处理关联** - 如何在对象图中导航关联。 - 示例:获取 `Person` 的地址列表。 - **值的集合** - 如何将多个相同类型的值映射到一个集合上。 - 示例:...

    hibernate3.zip

    10. **多对一、一对多、多对多关联映射**:Hibernate3支持多种关联关系的映射,包括单向、双向、级联操作等,使得数据库关系模型能够完整地映射到对象模型。 通过这个"hibernate3.zip"压缩包,你可以获取到完整的...

    Hibernate3中文文档

    - **关联映射**: 如何处理实体之间的关联关系,包括多对一、一对多、一对一等。 #### 总结 本篇文档提供了关于Hibernate框架的基础知识和深入实践的指导,适合初学者快速入门及进阶学习。通过这些知识点的学习,...

    Hibernate+中文文档

    7.3. 使用连接表的单向关联(Unidirectional associations with join tables) 7.3.1. 一对多(one to many) 7.3.2. 多对一(many to one) 7.3.3. 一对一(one to one) 7.3.4. 多对多(many to many) 7.4. ...

    hibernate3 API+电子教程

    9. **集合映射**:Hibernate支持一对多、多对一、一对一和多对多关系映射,使用`@OneToMany`, `@ManyToOne`, `@OneToOne`, `@ManyToMany` 注解实现。 10. **关联映射策略**:包括外键映射、单向和双向关联、懒加载...

    孙卫琴精通hibernate part3

    《孙卫琴精通Hibernate Part3》是对知名数据库框架Hibernate深入探讨的系列教程的第三部分,主要涵盖的内容可能包括但不限于高级查询、性能优化、缓存策略、关联映射、多对多关系、一对多关系、一对一关系等核心主题...

    hibernate_reference中文文档.pdf

    - **7.5.1 一对多 (one to many)/多对一 (many to one)**:说明使用连接表的双向一对多/多对一关联映射。 - **7.5.2 一对一 (one to one)**:介绍使用连接表的双向一对一关联映射。 - **7.5.3 多对多 (many-to-...

    hibernate4.1中文api

    - **一对多或多对一的**: 处理双向的一对多或多对一关联。 - **一对一**: 处理双向的一对一关联。 - **双向关联联接表**: 使用联接表处理双向关联。 #### 9. 组件映射 - **依赖对象**: 映射嵌套对象。 - **依赖...

    hibernate夏昕.pdf内容全面通俗易懂

    - **多对多关联**: 多个实体之间通过中间表建立关联。 - **数据访问**: - **PO和VO**: - PO: 持久化对象,用于与数据库交互。 - VO: 值对象,用于业务逻辑处理。 - **其他特性**: - unsaved-value: 特殊标记,...

    hibernate3参考文档

    8. **集合映射**:解释如何处理一对多、一对一、多对多等关系映射,以及集合类型的特殊处理。 9. **关联映射**:涵盖不同类型的关联(如单向、双向、自关联)的配置和使用方法。 10. **事件和拦截器**:介绍如何...

    HibernateAPI中文版.chm

    7.3. 使用连接表的单向关联(Unidirectional associations with join tables) 7.3.1. 一对多(one to many) 7.3.2. 多对一(many to one) 7.3.3. 一对一(one to one) 7.3.4. 多对多(many to many) 7.4. ...

Global site tag (gtag.js) - Google Analytics