多对多单向,一个学生可以有多个老师,一个老师也可以教多个学生。老师可以找到他的学生,学生找不到教他的老师。

老师类Teacher:

package com.oracle.hibernate;

import java.util.HashSet;
import java.util.Set; import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table; @Entity
public class Teacher { private int id;
private String name;
//用set集合,不重复。因为表里的记录也不会重复
private Set<Student> students = new HashSet<Student>(); @Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
/**
* 多对多单向,会生成一张中间表,默认名字为Teacher_student,
* 默认的列名为teacher_id,students_id,
* @JoinTable修改中间表名、属性名
* name="t_s" 指定中间表名字
* 中间表只有学生id和老师id,
* joinColumns指定当前(Teacher类)的表的id
* inverseJoinColumns,逆转的,对方的,指定对方那张表对应的外键的id
*/
@ManyToMany
@JoinTable(name="t_s",
joinColumns={@JoinColumn(name="teacher_id")},
inverseJoinColumns={@JoinColumn(name="student_id")} )
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} }

学生类Student:

package com.oracle.hibernate;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne; @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;
} }

生成的表:

hibernate生成表的语句:

create table Student (
id integer not null auto_increment,
name varchar(255),
primary key (id)
)

create table Teacher (
id integer not null auto_increment,
name varchar(255),
primary key (id)
)

create table t_s (
teacher_id integer not null,
student_id integer not null,
primary key (teacher_id, student_id)
)

alter table t_s
add index FK1BF68372EF01B (teacher_id),
add constraint FK1BF68372EF01B
foreign key (teacher_id)
references Teacher (id)

alter table t_s
add index FK1BF682693A57B (student_id),
add constraint FK1BF682693A57B
foreign key (student_id)
references Student (id)

生成了Student表和Teacher表和中间表  t_s,列名也和自己设置的一样。

最新文章

  1. java提高篇(二四)-----HashSet
  2. MongoDB过过瘾
  3. 04 SQL是关于集合的
  4. php获取一年中某一周的开始和结束时间
  5. 两个有用的shell工具总结
  6. iOS开发--动画(Animation)总结
  7. java中遍历List中的map问题
  8. linux 内核源代码分析 - 获取数组的大小
  9. 编写可维护的JS 06
  10. CyQ.data MDataTable
  11. Jexus~Linux环境下的部署
  12. 读Zepto源码之内部方法
  13. UCloud双11活动 - 新人UCloud代金券最低年100元香港云服务器
  14. CentOS 7使用yum安装MYSQL
  15. Kattis之旅——Inverse Factorial
  16. Kaggle 商品销量预测季军方案出炉,应对时间序列问题有何妙招
  17. Java MVC和三层架构
  18. javascript版format函数,方便实现复杂字串连接
  19. js学习笔记19----getElementsByClassName函数封装
  20. IO模型浅析-阻塞、非阻塞、IO复用、信号驱动、异步IO、同步IO

热门文章

  1. Spring MyBatis Oracle 多数据源
  2. 安装及运行 RabbitMQ 服务器 (windows)
  3. swift学习之UITabelView ----使用xib定义cell
  4. [label][翻译][JavaScript-Translation]七个步骤让你写出更好的JavaScript代码
  5. SqlServer 的一个坑
  6. 作业 c++编写
  7. 10-09 Linux的文件系统介绍以及各种设备的说明
  8. EasyUi控件Datagrid
  9. c# 后台GET、POST、PUT、DELETE传输发送json数据
  10. Android 载入 HTML