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

Hibernate 多对多例

阅读更多
SQL(MY SQL):
create table tgroup (
  group_id int not null auto_increment,
  name varchar(16) not null default '',
  primary key  (group_id)
) type=innodb;

create table trole (
  role_id int not null auto_increment,
  name varchar(16) not null default '',
  primary key  (role_id)
) type=innodb;

create table tgroup_role (
  group_id int not null,
  role_id int not null,
  primary key(group_id, role_id),
  index (group_id),
  foreign key (group_id) references tgroup(group_id),
  index (role_id),
  foreign key (role_id) references trole(role_id)
) type=innodb;

Group 类:
package ivan.hibernate.many2many;
public class Group {
   private int id;
   private String name;
   private Set roles = new HashSet();
   ...
}

Group.hbm.xml:
<hibernate-mapping>
    <class name="ivan.hibernate.many2many.Group" table="tgroup">
        <id name="id" column="group_id" unsaved-value="0">
            <generator class="increment"/>
        </id>
        <property name="name" type="string"/>     
        <set name="roles"
             table="tgroup_role"
             cascade="save-update">           
             <key column="group_id"/>
             <many-to-many class="ivan.hibernate.many2many.Role"
                           column="role_id"/>
       </set>
    </class>
</hibernate-mapping>

Role 类:
package ivan.hibernate.many2many;
public class Role {
   private int id;
   private String name;
   private Set groups = new HashSet();
   ...
}

Role.hbm.xml:
<hibernate-mapping>
    <class name="ivan.hibernate.many2many.Role" table="trole">
        <id name="id" column="role_id" unsaved-value="0">
            <generator class="increment"/>
        </id>
        <property name="name" type="string"/>     
        <set name="groups"
             table="tgroup_role"
             inverse="true"
             cascade="save-update">           
             <key column="role_id"/>
             <many-to-many class="ivan.hibernate.many2many.Group"
                           column="group_id"/>
  </set>
    </class>
</hibernate-mapping>

hibernate.cfg.xml 同前面的例子差不多。

public class Test {

public static void main(String[] args) throws HibernateException {
   
  Role role1 = new Role();
  role1.setName("Role1");
  Role role2 = new Role();
  role2.setName("Role2");
  Role role3 = new Role();
  role3.setName("Role3");
  Group group1 = new Group();
  group1.setName("group1");
  Group group2 = new Group();
  group2.setName("group2");
  Group group3 = new Group();
  group3.setName("group3");
  group1.getRoles().add(role1);
  group1.getRoles().add(role2);
  group2.getRoles().add(role2);
  group2.getRoles().add(role3);
  group3.getRoles().add(role1);
  group3.getRoles().add(role3);
  role1.getGroups().add(group1);
  role1.getGroups().add(group3);
  role2.getGroups().add(group1);
  role2.getGroups().add(group2);
  role3.getGroups().add(group2);
  role3.getGroups().add(group3);

  SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
  Session session = sessionFactory.openSession();
  Transaction tx= session.beginTransaction();
  session.save(role1);
  session.save(role2);
  session.save(role3);
  session.save(group1);
  session.save(group2);
  session.save(group3);
  tx.commit();
  session.close();
  sessionFactory.close();
}
}

分享到:
评论

相关推荐

    hibernate5_ManyToMany多对多单向维护

    在处理多对多关联关系时,Hibernate提供了一种方便的方式来实现这种复杂的数据库关系。本文将详细讨论在Hibernate 5中如何实现ManyToMany单向维护的多对多关联。 首先,我们要理解多对多关联的基本概念。在数据库...

    hibernate(一对多,多对一映射)操作

    本文将深入探讨Hibernate中的一对多和多对一映射关系,并通过一个实际的demo演示它们在增删查改操作中的应用。 首先,我们要理解什么是数据库的关联关系。在数据库设计中,我们经常遇到一种情况,即一个实体可能与...

    Hibernate的多对一和一对多操作实例

    ### Hibernate的多对一和一对多操作实例:深入解析与应用 #### 1. 多对一和一对多概念解析 在关系型数据库设计中,多对一和一对多是两种非常基础且重要的关联关系类型。多对一指的是多个实体(如订单)与一个实体...

    hibernate框架多对多测试案例

    本教程将深入讲解Hibernate框架中的多对多(Many-to-Many)映射关系,这对于理解和应用Hibernate到实际项目中至关重要。 首先,我们需要理解多对多映射的基本概念。在数据库中,多对多关系是指两个表之间存在一对多...

    hibernate 单向多对多关联映射练习

    本练习主要关注的是Hibernate中的单向多对多关联映射,这是一种常见的关系数据库设计模式,用于表示两个实体间复杂的关系。 在多对多关联中,两个实体类可以相互拥有多个实例,但只在一个方向上建立关联。例如,...

    Hibernate(一对多表操作)

    在实际项目中,我们经常需要处理复杂的数据关系,其中一对一、一对多、多对一和多对多是最常见的关联关系。本篇主要讨论的是Hibernate中的一对多关系映射,以及如何在实际操作中进行配置和使用。 一对多关系指的是...

    Hibernate一对多,多对一映射

    本主题将深入探讨Hibernate中的一对多和多对一映射关系,这两种关系在实际的业务场景中非常常见。 首先,我们来理解一下一对多映射(One-to-Many Mapping)。在数据库设计中,一对多关系意味着一个父记录可以与多...

    Hibernate期末作业一对多(主外键)

    【标题】"Hibernate期末作业一对多(主外键)"涉及的是关系数据库设计与Java持久化框架Hibernate的应用,特别是关于一对多关联关系的实现。在数据库设计中,一对多关联是指一个实体(如表)可以对应多个其他实体,而...

    hibernate一对多,多对一,一对多双向关联

    本篇文章将深入探讨"一对多"、"多对一"以及"一对多双向关联"的概念,并结合实际例子进行详细讲解。 首先,我们来看"一对多"(One-to-Many)关系。在现实生活中,一个学生可以对应多个课程,这就是典型的"一对多...

    Hibernate多对多单向关联(annotation/xml)

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关联是一种常见的关系映射类型,它用于表示两个实体之间可以有多个对应的关系。本篇将详细讲解如何使用Hibernate实现多对多单向关联,包括注解(Annotation)...

    Hibernate一对多映射

    // 使用@ManyToOne注解声明多对一关系 @ManyToOne @JoinColumn(name = "user_id") private User user; // getters and setters } ``` **3. 关联的属性和操作** 在`User`类中,`orders`字段被标记为`@...

    Hibernate多对多实现方式(多对多配置文件,数据库实现)

    本文将深入探讨如何在Hibernate中实现多对多关系,并通过配置文件和数据库实际操作来阐述这一过程。 首先,多对多关系在数据库设计中表示两个实体之间存在多个对应关系。比如,在学生和课程的关系中,一个学生可以...

    hibernate双向一对多关联映射(XML)

    在上述配置中,`&lt;one-to-many&gt;`标签定义了`User`到`Order`的一对多关系,而`&lt;many-to-one&gt;`标签定义了`Order`到`User`的多对一关系。`inverse="true"`意味着`Order`端负责维护关系,即当删除一个`Order`时,其对应的...

    hibernate一对多关联映射

    总结,Hibernate的一对多关联映射提供了处理实体间多对一关系的能力,既可实现单向关联,也可实现双向关联。通过合理配置,可以优化数据加载策略,进行级联操作,并方便地进行数据的保存和查询。在实际开发中,理解...

    hibernate一对多1

    在这个例子中,我们将讨论如何在Hibernate中设置一对多的关系,以员工(Employee)和部门(Dept)为例。 首先,我们来看`Employee`类。这个类代表员工,包含`empId`(员工ID)、`empName`(员工姓名)和`salary`...

    Hibernate实践例子程序

    以mysql为例,mysql-connector-java-3.1.×-bin.jar。 3. 配置文件。 1) Hibernate全局配置文件,hibernate.properties或者hibernate.cfg.xml.。一般使用XML文件。 2) 数据O/R mapping 配置文件,也就是数据库...

    hibernate_esb配置

    ESB通常通过JCA(Java Connector Architecture)适配器或者直接调用Hibernate API来实现对Hibernate的支持。这里我们以Apache ServiceMix为例,它是一个基于OSGi的ESB,支持多种适配器。 1. **JCA适配器方式**:...

    1 Hibernate 第一例

    7. **实体关系映射**:Hibernate支持多种关系映射,如一对一、一对多、多对一、多对多。这些关系可以通过注解或XML配置文件来定义。 8. **CRUD操作**:创建(Create)、读取(Retrieve)、更新(Update)和删除/Delete)是...

    Spring3.2.5Hibernate4.0.1Integration 完整範例

    标题 "Spring3.2.5Hibernate4.0.1Integration 完整範例" 指的是将 Spring 3.2.5 版本与 Hibernate 4.0.1 版本整合的一个实例项目。这个项目可能是为了演示如何在实际应用中有效地结合这两个框架,以便于更高效地管理...

Global site tag (gtag.js) - Google Analytics