`
jsczxy2
  • 浏览: 1277398 次
  • 性别: Icon_minigender_1
  • 来自: 常州
文章分类
社区版块
存档分类
最新评论

hibernate中多对多设置

阅读更多

一段时间不用了,纯属记录,以防忘记了。。。

在hibernate中,多对多关系可以看成是2个 多对一的关系。

     在实体UserInfo和Teacher中,都设置many-to-many属性,

  属性中需要设置主控方与被控方的inversecascade

     出现问题:save the transient instance before flushing

     说明:t_s表,不需要单独建实体对象,是一张表

 

 1 CREATE TABLE t_s
 2 (
 3   u_id integer NOT NULL,
 4   t_id integer NOT NULL,
 5   CONSTRAINT t_s_pkey PRIMARY KEY (u_id, t_id),
 6   CONSTRAINT t_s_t_id_fkey FOREIGN KEY (t_id)
 7       REFERENCES teacher (id) MATCH SIMPLE
 8       ON UPDATE NO ACTION ON DELETE NO ACTION,
 9   CONSTRAINT t_s_u_id_fkey FOREIGN KEY (u_id)
10       REFERENCES userinfo (id) MATCH SIMPLE
11       ON UPDATE NO ACTION ON DELETE NO ACTION
12 )

      UserInfo.hbm.cfg

1 <set name="teachers" table="t_s" inverse="false" cascade="all">
2             <key column ="u_id"></key>
3             <many-to-many class="Teacher" column="t_id"></many-to-many>
4         </set>

  Teacher.hbm.cfg

1 <set name="students" table="t_s" inverse="true" cascade="all">
2             <key column ="t_id"></key>
3             <many-to-many class="UserInfo" column="u_id"></many-to-many>
4         </set>

      测试代码:(*主控方与被控方的设置,先设主控方,在设被控方)

 1     ///多对多操作
 2     private static void ManyToMany()
 3     {
 4         Session session=HibernateUnit.getSession();
 5         session.beginTransaction();
 6         
 7         UserInfo u1=new UserInfo();
 8         UserInfo u2=new UserInfo();
 9         
10         Teacher t1=new Teacher();
11         Teacher t2=new Teacher();
12         
13         u1.setUsername("CC");
14         u1.setAge(20);
15         u1.setAddress("1111");
16         u1.setCg(null);
17         
18         u2.setUsername("MR");
19         u2.setAge(20);
20         u2.setAddress("1111");
21         u2.setCg(null);
22         
23         t1.setName("JiangRR");
24         t2.setName("ChenXD");
25 
26         u1.getTeachers().add(t1);
27         u2.getTeachers().add(t2);
28         t1.getStudents().add(u1);
29         t2.getStudents().add(u2);
30 
31         session.save(u1);
32         session.save(u2);
33         
34         session.getTransaction().commit();
35     }

 测试效果:

 1 Hibernate: select nextval ('userinfo_id_seq')
 2 Hibernate: select nextval ('teacher_id_seq')
 3 Hibernate: select nextval ('userinfo_id_seq')
 4 Hibernate: select nextval ('teacher_id_seq')
 5 Hibernate: insert into userinfo (username, age, address, id) values (?, ?, ?, ?)
 6 Hibernate: insert into teacher (username, id) values (?, ?)
 7 Hibernate: insert into userinfo (username, age, address, id) values (?, ?, ?, ?)
 8 Hibernate: insert into teacher (username, id) values (?, ?)
 9 Hibernate: insert into t_s (u_id, t_id) values (?, ?)
10 Hibernate: insert into t_s (u_id, t_id) values (?, ?)
分享到:
评论

相关推荐

    hibernate(多对多关系映射)

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系映射是一种常见的数据库交互模式,它用于表示两个实体之间复杂的关系。在这个场景中,一个实体可以与多个其他实体相关联,反之亦然。例如,在学生和课程...

    hibernate一对多项目

    本项目“hibernate一对多项目”旨在演示如何在JavaWeb应用中使用Hibernate处理一对多的关系映射。这里我们将深入探讨 Hibernate 的一对多关系、配置以及在实际项目中的应用。 首先,一对多关系在数据库中很常见,...

    Hibernate多对多实例+数据库代码

    这个实例对于初学者理解如何在实际项目中应用Hibernate处理多对多关联特别有帮助。通过查看代码和运行示例,开发者可以深入理解Hibernate是如何自动处理复杂的关联操作,比如通过中间表实现多对多的添加、删除和查找...

    Hibernate一对多使用非主键关联设置

    下面我们将详细探讨如何在Hibernate中设置一对多非主键关联。 首先,我们需要理解在Hibernate中一对多关联的基本概念。在Java对象中,这通常通过在一方类(拥有多个实例的一方)上定义一个集合属性来表示。这个集合...

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

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

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

    总之,Hibernate的多对一和一对多操作不仅提供了灵活的关联管理,还允许开发者将复杂的数据关系逻辑封装在应用程序中,从而简化数据库设计,提高代码的可读性和可维护性。然而,这也要求开发者对Hibernate的映射机制...

    hibernate双向多对多关联映射(注解版)

    在这个“hibernate双向多对多关联映射(注解版)”的主题中,我们将深入探讨如何使用Hibernate的注解配置来处理数据库中的双向多对多关联关系。 首先,多对多关联在数据库设计中是指两个实体之间存在多个对应关系,...

    hibernate多对多双向关联

    该描述提供了一个博客链接,虽然没有直接给出具体内容,但我们可以假设博客内容会详细解释如何在Hibernate中设置和管理多对多双向关联。这通常包括配置实体类、定义关联映射、使用中间表以及进行增删改查操作。在...

    Hibernate双向一对多

    标题"Hibernate双向一对多"指的是Hibernate框架中的一个重要关系映射概念,即在一个实体类中,一个实例可以与多个另一个实体类的实例相关联,而在另一个实体类中,每个实例也可以关联到该实体类的一个实例。...

    hibernate一对多与多对一

    本篇文章将详细讲解"hibernate一对多与多对一"的关系映射概念,以及如何在实际开发中进行配置和使用。 首先,我们来看一下“一对多”关系。在现实世界中,这种关系可以对应到例如一个班级有多个学生,或者一个人...

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

    “Hibernate 一对多,多对一,一对多双向关联”是指在Java持久化框架Hibernate中,实体间常见的三种关联关系。在数据库设计中,这种关联关系是常见的,例如一个用户可以有多个订单(一对多),一个订单对应一个用户...

    Hibernate学习:单向多对一关联 工程

    本项目“Hibernate学习:单向多对一关联 工程”专注于讲解Hibernate中的单向多对一关联映射,这是数据库设计中常见的关系类型,尤其在处理具有层次结构的数据时。 单向多对一关联指的是在一个实体类中有一个引用,...

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

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

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

    这个压缩包文件“HibernateORM”很可能包含了关于如何在实际项目中设置和使用Hibernate一对多双向关联的示例代码、配置文件或者详细教程。通过学习这些材料,开发者能够深入理解如何在Java应用中利用Hibernate来处理...

    hibernate中文参考文档

    18. 示例:不同的映射:除了父子关系映射,还可能有其他类型的映射,如多对多关系映射、一对一关系映射等。这里应该会介绍如何处理这些复杂的映射场景。 19. 最佳实践:最后,文档将总结Hibernate开发中的一些最佳...

    hibernate中文参考手册

    在映射文件(.hbm.xml)中,开发者定义了实体类与数据库表之间的映射关系,包括字段与列的对应、主键生成策略、关联关系(一对一、一对多、多对一、多对多)等。此外,还可以通过注解方式进行映射,将这些信息直接...

    hibernate多对多

    在Hibernate中,多对多关系通常通过中间表来实现,这个中间表包含两个外键,分别引用参与多对多关系的两个实体。这种设计允许在不破坏数据完整性的前提下,灵活地建立和维护两个表之间的关系。 **二、配置多对多...

    Hibernate级联操作一对多demo

    在这个" Hibernate级联操作一对多demo "中,我们将探讨如何在一对多的关系中应用级联操作。 一对多关系是数据库中常见的关系类型,它表示一个实体(如部门)可以有多个相关实体(如员工)。在Hibernate中,这种关系...

    hibernate 多对多映射实例,学生 选课

    在这个“hibernate 多对多映射实例,学生 选课”项目中,我们将探讨如何使用Hibernate处理多对多关系,以及如何构建一个学生选课的系统。 首先,我们要理解多对多关系。在现实生活中,学生和课程之间就是一个典型的...

    hibernate基于主外键的一对多/多对一关联

    总结起来,Hibernate中的一对多/多对一关联是通过主外键映射来实现的,通过注解和配置文件定义实体间的关联关系,利用懒加载或立即加载策略控制数据获取,同时要注意双向关联的维护和级联操作的设置,以确保数据的...

Global site tag (gtag.js) - Google Analytics