博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JPA(五)之实体关系多对多
阅读量:7040 次
发布时间:2019-06-28

本文共 4938 字,大约阅读时间需要 16 分钟。

  hot3.png

1.背景介绍:学生和教师之间可以认为是多对多的关系

2.persistence.xml

3.实体bean

Student.java

package com.sinoi.bean;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.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;@Entitypublic class Student {	@Id @GeneratedValue	private Integer id;	@Column(length=10, nullable=false)	private String name;	@ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)	@JoinTable(name="student_teacher", inverseJoinColumns=@JoinColumn(name="tea_id"),			 joinColumns=@JoinColumn(name="stu_id"))	//inverseJoinColumn指向另外一个类对应表的id,而joinColumns指向就是所在这个类对应表的id	private Set
teachers = new HashSet
(); public Student(String name) { this.name = name; } public Student() {} public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set
getTeachers() { return teachers; } public void setTeachers(Set
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); } } }

 

Teacher.java

package com.sinoi.bean;import java.util.HashSet;import java.util.Set;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToMany;//被维护端@Entitypublic class Teacher {	@Id @GeneratedValue	private Integer id;	@Column(length=10, nullable=false)	private String name;	@ManyToMany(mappedBy="teachers", fetch=FetchType.LAZY)	private Set
students = new HashSet
(); public Teacher(String name) { this.name = name; } public Teacher() {} public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set
getStudents() { return students; } public void setStudents(Set
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; } }

 

4.测试

 

package junit.test;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import org.junit.Test;import com.sinoi.bean.Student;import com.sinoi.bean.Teacher;public class UnitTest {	//保存数据	@Test	public void save() {		EntityManagerFactory factory = Persistence.createEntityManagerFactory("unitname");		EntityManager manager = factory.createEntityManager();		manager.getTransaction().begin();				manager.persist(new Teacher("Mr li"));		manager.persist(new Student("bean"));				manager.getTransaction().commit();		manager.close();		factory.close();	}		//建立联系	@Test	public void buildST() {		EntityManagerFactory factory = Persistence.createEntityManagerFactory("unitname");		EntityManager manager = factory.createEntityManager();		manager.getTransaction().begin();				//需要无参构造函数,否则会出现错误		Teacher teacher = manager.getReference(Teacher.class, 1);		Student student = manager.getReference(Student.class, 1);		student.addTeacher(teacher);				manager.getTransaction().commit();		manager.close();		factory.close();	}		//解除教师与学生关系	@Test	public void deleteTeacher() {		EntityManagerFactory factory = Persistence.createEntityManagerFactory("unitname");		EntityManager manager = factory.createEntityManager();		manager.getTransaction().begin();				Teacher teacher = manager.getReference(Teacher.class, 1);		Student student = manager.getReference(Student.class, 1);		student.removeTeacher(teacher);				manager.getTransaction().commit();		manager.close();		factory.close();	}		//删除学生   	//注:如果要删除老师,得先将解除老师和学生之间的关系,然后再删除老师	@Test	public void deleteStudent() {		EntityManagerFactory factory = Persistence.createEntityManagerFactory("unitname");		EntityManager manager = factory.createEntityManager();		manager.getTransaction().begin();				Student student = manager.getReference(Student.class, 1);		manager.remove(student);				manager.getTransaction().commit();		manager.close();		factory.close();	}}

转载于:https://my.oschina.net/beanGo/blog/168988

你可能感兴趣的文章
windows下apache+php+mysql 环境配置方法
查看>>
solais 10中执行crontab -e报unkown terminal type
查看>>
jar包下载网址
查看>>
virtualbox使用总结
查看>>
CentOS7上搭建VNC服务
查看>>
Apache select与Nginx epoll模型区别
查看>>
Vue组件入门
查看>>
广告条
查看>>
『中级篇』Docker-cloud介绍(54)
查看>>
到期的Navicat需要注册码--解决方案
查看>>
【Unity3D基础教程】给初学者看的Unity教程(二):所有脚本组件的基类 -- MonoBehaviour的前世今生...
查看>>
×××小程序接口调试
查看>>
OpenSSL安装
查看>>
我是如何沉迷于linux系统的?
查看>>
微软正式释出基于 Chromium 的全新版本 Edge
查看>>
SHELL菜单select练习
查看>>
aaa
查看>>
wwballizer以及awstat下的apache日志监控
查看>>
NO3.Shell脚本学习——编写Shell脚本
查看>>
Linux 磁盘管理及基础命令使用
查看>>