JPA中,多对多关系用@ManyToMany标示。

关系维护端:

 package com.yl.demo1.bean.manyTomany;

 import java.util.HashSet;
import java.util.Set; import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany; @Entity
public class Student {
private Integer id;
private String name;
private Set<Teacher> teachers = new HashSet<Teacher>(); public Student(){} public Student(String name) {
super();
this.name = name;
}
@Id @GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=10, nullable=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* Student是关系的维护端
* inverseJoinColumns和joinColumns是定义关联表中的字段,其中inverseJoinColumns定义关系被维护端的字段
* joinColumns定义关系维护端的字段
*/
@ManyToMany(cascade=CascadeType.REFRESH)
@JoinTable(name="student_teacher", inverseJoinColumns=@JoinColumn(name="teacher_id"),
joinColumns=@JoinColumn(name="student_id"))
public Set<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
} public void addTeacher(Teacher teacher) {
this.teachers.add(teacher);
} public void removeTeacher(Teacher teacher) {
if (this.teachers.contains(teacher)) {
this.teachers.remove(teacher);
}
}
}

关系被维护端:

 package com.yl.demo1.bean.manyTomany;

 import java.util.HashSet;
import java.util.Set; import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany; @Entity
public class Teacher {
private Integer id;
private String name;
private Set<Student> students = new HashSet<Student>(); public Teacher(){} public Teacher(String name) {
super();
this.name = name;
}
@Id @GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=10, nullable=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//teacher为关系的被维护端
@ManyToMany(cascade=CascadeType.REFRESH, mappedBy="teachers", fetch=FetchType.LAZY)
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
} @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
} @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Teacher other = (Teacher) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
} }

常见操作:

 @Test
public void save() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("YL");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();//事务开始 Student student = new Student("yyyy");
em.persist(student); Teacher teacher = new Teacher("jiawenhui");
em.persist(teacher); em.getTransaction().commit();
em.close();
factory.close();
} /**
* 建立学生与老师之间的关系
*/
@Test
public void buildConnection() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("YL");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();//事务开始 Student student = em.find(Student.class, 1); Teacher teacher = em.getReference(Teacher.class, 1); student.addTeacher(teacher); em.getTransaction().commit();
em.close();
factory.close();
} /**
* 解除学生与老师之间的关系
*/
@Test
public void deleteConnection() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("YL");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();//事务开始 Student student = em.find(Student.class, 1); Teacher teacher = em.getReference(Teacher.class, 1); student.removeTeacher(teacher); em.getTransaction().commit();
em.close();
factory.close();
} /**
* 删除老师(删除关系被维护端)
*/
@Test
public void deleteTeacher() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("YL");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();//事务开始 Student student = em.find(Student.class, 1);
Teacher teacher = em.getReference(Teacher.class, 1);
//先解除Student和Teacher之间的关系
student.removeTeacher(teacher);
//在删除Teacher
em.remove(teacher); em.getTransaction().commit();
em.close();
factory.close();
} /**
* 删除学生(删除关系维护端)
*/
@Test
public void deleteStudent() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("YL");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();//事务开始 Student student = em.getReference(Student.class, 1);
em.remove(student); em.getTransaction().commit();
em.close();
factory.close();
}

最新文章

  1. js 递归学习
  2. 自己编写的一个有关安卓应用开发培训PPT
  3. BestCoder19 1001.Alexandra and Prime Numbers(hdu 5108) 解题报告
  4. FDTD扩展到所有频率
  5. AMD&amp;CMD
  6. Swift学习笔记四
  7. 基于Hadoop 2.2.0的高可用性集群搭建步骤(64位)
  8. 2016.7.16equals的使用(一)
  9. 查GDI对象泄露的利器:GDIView
  10. python下module、package导入
  11. cocos2d-x游戏开发 跑酷(两) 物理世界
  12. INFORMIX 时间函数大全
  13. 从yum提示空间不足到根分区扩容
  14. Java随机数和UUID
  15. ping通windows下虚拟机上的linux系统
  16. .Net Core 在Linux服务器下部署程序--(4). 前端ReactWeb应用部署
  17. CDN边缘节点容器调度实践(上)
  18. C++ 64位操作系统调用 RegOpenKey() 读取注册表,返回 2, ERROR_FILE_NOT_FOUND
  19. 【摘】Fiddler工具使用介绍
  20. java知识 特殊符号转换

热门文章

  1. Device disconnected
  2. ORA-12838: cannot read/modify an object after modifying it in parallel
  3. Oracle 常用操作
  4. csu 1303 Decimal (数论题)
  5. java第一课:环境、变量、数据类型
  6. 1043: [HAOI2008]下落的圆盘 - BZOJ
  7. hdu 4190
  8. EasyUI combotree值的设置 setValue
  9. linux Ubuntu安装后没有引导 解决方案
  10. Linux资源监控_Nmon