多对多关联:

示例: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的两个外键。

最新文章

  1. 制作动画或小游戏——CreateJS事件(二)
  2. Oracle逻辑结构(TableSpace→Segment→Extent→Block)
  3. 【leetcode】Word Ladder II
  4. ASP.NET 回调技术(CallBack)
  5. 括号匹配 区间DP (经典)
  6. CentOS6.5下安装wine OK
  7. Qt的gzip模块实现
  8. 开源 免费 java CMS - FreeCMS1.9 会员组管理
  9. linux shell 找端口号及对应的进程
  10. 1.5 sleep()方法
  11. Windows &amp; Linux服务器如何禁用ping总结
  12. SSM-SpringMVC-12:SpringMVC中BeanNameViewResolver这种视图解析器
  13. Atcoder Beginner Contest 124 解题报告
  14. apache服务器的常用功能及设置
  15. db2修改表结构,增加列,删除列等
  16. 解决SVN安装语言包后无法选择中文的问题(亲测可行)
  17. xml-treeview转换
  18. 关于RAM与ROM的区别与理解
  19. java对象在JVM堆中的数据结构
  20. 微软的TransactionScope类是个好玩意

热门文章

  1. Style Lessons in Clarity and Grace (11th Edition)中文翻译
  2. jQuery 属性操作方法
  3. PHP中通过数组遍历找出最小值
  4. 忘记了Ubuntu的密码
  5. node.js cmd常用命令
  6. windows下sshfs挂载远程文件夹-server could not connect故障解决
  7. jmeter对响应结果做正则、json、xpath结果测试
  8. poj3159
  9. 关于在react和node中,经常出现的const
  10. grafana-----Time Range Controls