hibernate 映射-多对多双向

hibernate 中的多对多,在数据库中就是一张中间表,

范例:

考试与考试之间是一种多对多的关系:

(1)一个考生可以参加多场考试;

(2)一场考试可以有多个考生参加;

(3)不同的考生可以参加同一场考试;不同的考试可以有相同的考生。

考生类:User,中有成员变量private List<Exam> exams 

考试类:Exam,中有成员变量 private List<User> users

在User.Java 中的配置:

Java代码  

  1. @ManyToMany  
  2.     @JoinTable(name = "t_user_exam", joinColumns =  
  3.     { @JoinColumn(name = "user_id") }, inverseJoinColumns =  
  4.     { @JoinColumn(name = "exam_id") })  
  5.     public List<Exam> getExams()  
  6.     {  
  7.         return exams;  
  8.     }  

 在Exam.java 中要配置:

Java代码  

  1. @ManyToMany(mappedBy = "exams")  
  2. public List<User> getUsers()  
  3.     {  
  4.         return users;  
  5.     }  

 

创建的中间表的名称是t_user_exam,其中user_id是参考考生id的外键;exam_id是参考考试id的外键。

sql语句:

15:24:37,390 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 - 

    create table t_user_exam (

        user_id integer not null,

        exam_id integer not null

    )

15:24:37,453 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 - 

    alter table t_user_exam 

        add index FK331826084DE43CAB (exam_id), 

        add constraint FK331826084DE43CAB 

        foreign key (exam_id) 

        references Exam (id)

15:24:37,609 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 - 

    alter table t_user_exam 

        add index FK3318260894018D2B (user_id), 

        add constraint FK3318260894018D2B 

        foreign key (user_id) 

        references User (id)

 

单向与双向的区别:

(1)单向,只能从一方导航到另一方,不能反之;即只能从A导航到B,而不能从B导航到A;

双向,可以从一方导航到另一方,反之亦然;即既可以从A导航到B,也可以从B导航到A;

(2)单向,只需要配置导航始发地的类;

双向,两个类都需要配置。

 

注意:

(1)成员变量名称中最好不要有下划线;

(2)成员变量的类型中不要有ArrayList,应该用List 或Set

 

时间: 2024-09-08 21:32:05

hibernate 映射-多对多双向的相关文章

【SSH系列】Hibernate映射 -- 多对多关联映射

     映射原理         在数据库学习阶段,我们知道,如果实体和实体之间的关系是多对多,那么我们就抽出来第三张表,第一张表和第二张表的主键作为第三表的联合主键,结合我们的hibernate,多对多关联,无论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张表中做一个关联,用第三张表来解决可能造成的数据冗余问题.今天这篇博文小编来简单的介绍一下hibernate中的多对多关联映射.        在某些系统中,一个用户可以有多个角色,一个角色也可以有多个用户,so,她们之

hibernate 映射-一对多双向

项目名称:shop_goods 使用spring ,hibernate,struts2,分别的版本如下: spring :3.2.3.RELEASE hibernate:4.2.2.Final struts2:2.3.4.1 使用xml配置,使用maven构建. 这里涉及两个实体类:商品,超市.因为要讲解一对多的关系映射,所以假设商品和超市之间是多对一联系. 一个超市有多个商品,一个商品只属于一个超市. 实体类代码如下(省略setter,getter方法)   Java代码   package 

【SSH系列】Hibernate映射-- 多对一单向关联映射

      在hibernate中非常重要的就是映射,在前面的博文中,小编简单的介绍了基本映射,基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用.这个比较简单,但是基础知识还是需要好好掌握的哦,还有一些关联映射,比如user && group,她们之间的关系是一对多,我们知道一个用户只能属于一个组,但是一个组可以包好N多个用户,所以他们之间的关系就是多对一的关系,接着我们来看他们的对象模型以及关系模式.

java中Hibernate多对多双向关联的配置

 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任  Hibernate的双向多对多关联有两种配置方法:那我们就来看看两种方案是如何配置的.          一.创建以各自类为类型的集合来关联       1.首先我们要在两个实体类(雇员<Emploee>.工程<Project>)中各自给对方添

Hibernate从入门到精通(十一)多对多双向关联映射

上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我 们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看一下相关类图和代码,具体如下: public class Role { private int id; private String name; private Set users; public int getId() { return id; } public void setId(int id

hibernate5(11)注解映射[3]一对多多对一双向关联

在上两篇文章里,我们详细地分别讲解了一对多和多对一的单向关联配置的具体属性含义,在这一篇文章里,我们完成两者的的整合建立双向关联. 在实际的博客网站中,我们可能需要根据文章读取作者(用户)信息,但肯定也要让用户能获取自己的文章信息,针对这种需求,我们可以建立文章(多)对用户(一)的双向关联映射. 下面先看实例映射配置文件: /********************一方配置User********************/ @Entity//声明当前类为hibernate映射到数据库中的实体类

hibernate中映射多对多的问题

问题描述 在hibernate中,如果要映射多对多的映射比如有两个实体:user, privilege,数据库中通过link表来表示两者的关联关系,单在link中有一个flag标识是否有效,这样怎样在hibernate中解决?拆成两个一对多?还有没有其他方法?问题补充:我的意思是link中除了那三个字段之外,我还有一个字段表示这个关系是否生效,也就是说,这个字段是重点,在业务中要靠这个字段来确定映射关系是否有效.谢谢问题补充:formular我试过可是如果我的需求是动态的,怎么办?其实这才是我的

【SSH系列】hibernate映射 -- 一对一双向关联映射

       开篇前言       上篇博文[SSH进阶之路]hibernate映射--一对一单向关联映射,小编介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身份证端加载人得信息.为什么呢,因为对象模型具有方向性,在前面的博文Hibernate基本映射中,小编介绍了单向和双向,所谓的单向就是一段只能加载另一个端,不能反过来:双向就是两端都可以加载另一端,可以这样来理解,单向就是一厢情愿,双向就是两情相悦.ok,那么问题来了,如果我

【hibernate框架】多对多双向关联(XML实现)

多对多的双向关联:(非常少用) 通过老师可以知道他教了多少学生,这是单项多对多.而如果同时通过学生知道有多少个老师教他,那么就是多对多双向的关联. XML实现: Student.java: package cn.edu.hpu.many2many; import java.util.HashSet; import java.util.Set; public class Student { private int id; private String name; private Set<Teach