多对多关联:

示例:Teacher和Student,一个Teacher可以教很多student,一个Student也可以被很多teacher教

 

多对多单向关联

Teacher知道自己教了哪些学生,Student不知道教自己的有哪些老师

在Teacher中建(Set集合形式的)Student对象,并添加@ManyToMany注解

1.建Teacher实体类和Student实体类,添加Annotation注解,如下

@Entity
public class Teacher {
private int id;
private String name; private Set<Student> students = new HashSet<Student>(); @Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} @ManyToMany
// @JoinTable(name="t_s",
// joinColumns={@JoinColumn(name="t_id")},
// inverseJoinColumns={@JoinColumn(name="s_id")}
// )
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
} }

 

@Entity
public class Student {
private int id;
private String name; @Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

2.在hibernate.cfg.xml中添加mapping语句

<mapping class="com.hibernate.model.Teacher"/>
<mapping class="com.hibernate.model.Student"/>

3.建Junit测试类

public class ORMappingTest {

	@Test
public void test() {
new SchemaExport(new Configuration().configure()).create(true, true);
}
}

程序至此结束,运行程序,在数据库中生成表teacher、表student以及中间表teacher_student(默认名)。

中间表teacher_student中会自动生成属性名为Teacher_id和students_id的两个外键,

可用@JoinTable注解修改中间表的名字及其属性名,如下:

@ManyToMany
@JoinTable(name="t_s",
joinColumns={@JoinColumn(name="t_id")},
inverseJoinColumns={@JoinColumn(name="s_id")}
)
public Set<Student> getStudents() {
return students;
}

这样会在数据库中生成名为t_s的中间表,表中有属性名为t_id和s_id的两个外键。

 

多对多双向关联

Teacher知道自己教了哪些学生,Student也知道教自己的有哪些老师

在Teacher中建(Set集合形式的)Student对象,在Student中建(Set集合形式的)Teacher对象,并添加@ManyToMany注解

1.建Teacher实体类和Student实体类,添加Annotation注解

Teacher类,同上

Student类,如下:

@Entity
public class Student {
private int id;
private String name; private Set<Teacher> teachers = new HashSet<Teacher>(); @Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} @ManyToMany(mappedBy="students") //多对多关系
public Set<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
}
}

 

2.在hibernate.cfg.xml中添加mapping语句----同上

3.建Junit测试类----同上

 

程序至此结束,运行程序,在数据库中生成表teacher、表student以及中间表teacher_student(默认名)。

中间表teacher_student中会自动生成属性名为Teacher_id和students_id的两个外键,

可用@JoinTable注解修改中间表的名字及其属性名,

这样会在数据库中生成名为t_s的中间表,表中有属性名为t_id和s_id的两个外键。

Hibernate多对多关联的更多相关文章

  1. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  2. atitit.atitit.hb many2one relate hibernate 多对一关联配置..

    atitit.atitit.hb many2one relate hibernate 多对一关联配置.. 1. 多对一单向 @ManyToOne 1 1. 其中@JoinColumn 注解 2 2.  ...

  3. 05.Hibernate多对多关联

        前言:本文讲解使用Hibernate映射多对多关联关系,并使用多种方式映射多对多关联. 1.数据库表的多对多关系     本文根据学生信息表(tb_student)和教师信息表(tb_teac ...

  4. Hibernate多对多关联映射的HQL中的in条件查询问题

    群里有朋友求解一个问题,高分求一条HQL多对多查询语句 . 问题描述见 http://topic.csdn.net/u/20090621/16/4eac6fe0-bf3e-422e-a697-f758 ...

  5. Hibernate 多对一关联查询

     版权声明:本文为博主原创文章,如需转载请标注转载地址.  博客地址:http://www.cnblogs.com/caoyc/p/5598269.html  一.单向多对一和双向多对一的区别 如果只 ...

  6. Hibernate 多对多关联映射, 中间表加查询条件

    package com.coracle.yk.xpo.po.base; import java.util.Date; import java.util.HashSet; import java.uti ...

  7. Hibernate 多对多关联Demo

    以学生[Student ]与课程[Course ]之间的关系为例: //Course .java public class Course implements Serializable { priva ...

  8. hibernate 多对一关联

    (转自尚学堂教学内容)   注解多对一: package com.bjsxt.hibernate; import javax.persistence.Entity; import javax.pers ...

  9. Hibernate 多对多关联查询条件使用

    from Brand as b inner join fetch b.styles as s where s.styleId=?

随机推荐

  1. CentOS环境下yum安装LAMP

    第一步:更新系统内核 yum -y update 如果执行失败报错,可以执行修复命令:rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY* 第二步: 安装Apahce.M ...

  2. VMware-vSphere-5.1--------群集、HA、DRS、FT

    VMware vSphere 5.1 高可用性       在本节中主要讲的是集群的一些功能和配置,相比5.0的设置,没有太大的变化.VMware vSphere为虚拟机提供虚拟化的基础架构,将现有的 ...

  3. tomcat的bin目录中startup.bat/tomcat.6.exe/tomcat6w.exe区别

    一.tomcat6.exe 与 startup.bat的区别 1.两者都可以用于启动Tomcat tomcat6.exe则是必须将tomcat注册Windows服务之后才可以用于启动tomcat服务; ...

  4. Data Replication in a Multi-Cloud Environment using Hadoop & Peer-to-Peer technologies

    http://fbevmware.blogspot.com/2013/12/data-replication-in-multi-cloud.html 要FQ... —————————————————— ...

  5. python升级后pip 不可用 卸载pip

    python版本由2.6升级到2.7之后,用pip提示报错 找了一下原因,网上的版本很多.弄来弄去比较麻烦 来点简单粗暴的 1.卸载pip yum remove python-pip 2.下载 cur ...

  6. javascript对象定义

    转载自:http://blog.sina.com.cn/s/blog_75a8cfac0100pif0.html javascript定义对象写法 javascript定义对象的几种简单方法 1.构造 ...

  7. 输入一个十进制数N,将它转换成R进制数输出(运用递归实现)

    #include<stdio.h> int cnt=0;                             //用来记录每个进制存放的位置 char num[20];   //用来存 ...

  8. jodis遇到的问题

    1. Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper java找jar ...

  9. 转:: 刺鸟:用python来开发webgame服务端(5)

    来源:http://ciniao.me/article.php?id=19 --------------- 刺鸟原创文章,转载请注明出处    在前面的文章中,我们已经开始了不少逻辑功能的开发,在这期 ...

  10. redis 有序集合数据结构实现 skiplist

    Redis使用跳跃表作为有序集合键的的底层实现,如果一个有序集合包含的元素数量比较多,又或者有序集合中元素的成员是比较长的字符串时Redis就会使用跳跃表 来作为有序集合键的底层实现 Redis只在两 ...