欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JPA 多对多实例配置

程序员文章站 2022-02-12 21:24:19
...
@Entity
public class Student {

	private Integer s_id;

	private String s_name;

	private Set<Teacher> teachers = new HashSet<Teacher>();

	public Student() {
		
	}

	public Student(String s_name) {
		this.s_name = s_name;
	}

	@Id
	@GeneratedValue
	public Integer getS_id() {
		return s_id;
	}

	public void setS_id(Integer s_id) {
		this.s_id = s_id;
	}

	@Column(nullable = false, length = 20)
	public String getS_name() {
		return s_name;
	}

	public void setS_name(String s_name) {
		this.s_name = s_name;
	}

	@ManyToMany(mappedBy = "students")
	public Set<Teacher> getTeachers() {
		return teachers;
	}

	public void setTeachers(Set<Teacher> teachers) {
		this.teachers = teachers;
	}

	@Override
	public int hashCode() {
		final int PRIME = 31;
		int result = 1;
		result = PRIME * result + ((s_id == null) ? 0 : s_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;
		final Student other = (Student) obj;
		if (s_id == null) {
			if (other.s_id != null)
				return false;
		} else if (!s_id.equals(other.s_id))
			return false;
		return true;
	}

}

 

@Entity
public class Teacher {

	private Integer t_id;

	private String t_name;

	private Set<Student> students = new HashSet<Student>();

	public Teacher() {

	}

	public Teacher(String t_name) {
		this.t_name = t_name;
	}

	@Id
	@GeneratedValue
	public Integer getT_id() {
		return t_id;
	}

	public void setT_id(Integer t_id) {
		this.t_id = t_id;
	}

	@Column(nullable = false, length = 20)
	public String getT_name() {
		return t_name;
	}

	public void setT_name(String t_name) {
		this.t_name = t_name;
	}

	@ManyToMany()
	@JoinTable(name = "student_teacher", inverseJoinColumns = @JoinColumn(name = "student_id"), joinColumns = @JoinColumn(name = "teacher_id"))
	public Set<Student> getStudents() {
		return students;
	}

	public void setStudents(Set<Student> students) {
		this.students = students;
	}

	/**
	 * 添加学生
	 * 
	 * @param stu
	 */
	public void addStudent(Student stu) {
		this.students.add(stu);
	}

	/**
	 * 删除学生
	 * @param stu
	 */
	public void removeStudent(Student stu) {
		if(this.students.contains(stu)){
			this.students.remove(stu);
		}
	}
}

测试如下:

public class JPA_ManyToManyTest {
	@Test
	public void manyTomany() throws Exception {
		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("mengya");
		factory.close();
	}

	/**
	 * 保存数据并建立关系
	 * 
	 * @throws Exception
	 */
	@Test
	public void save() throws Exception {
		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("mengya");
		EntityManager em = factory.createEntityManager();
		em.getTransaction().begin();
		Teacher teacher = new Teacher("梦娅");
		Student stu = new Student("张明学");
		// 建立关系
		teacher.addStudent(stu);
		em.persist(stu);
		em.persist(teacher);
		em.getTransaction().commit();
		em.close();
		factory.close();
	}

	/**
	 * 解除关系
	 * 
	 */
	@Test
	public void removeTeacherStudent() {
		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("mengya");
		EntityManager em = factory.createEntityManager();
		em.getTransaction().begin();
		Teacher t = em.find(Teacher.class, 1);
		t.removeStudent(em.getReference(Student.class, 1));
		em.getTransaction().commit();
		em.close();
		factory.close();
	}

	@Test
	public void deleteStudentTeacher() {
		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("mengya");
		EntityManager em = factory.createEntityManager();
		em.getTransaction().begin();
		em.remove(em.getReference(Student.class, 1));
		em.remove(em.getReference(Teacher.class, 1));
		em.getTransaction().commit();
		em.close();
		factory.close();
	}

	// 操作成功

	@Test
	public void deleteTeacherStudent() {
		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("mengya");
		EntityManager em = factory.createEntityManager();
		em.getTransaction().begin();
		em.remove(em.getReference(Teacher.class, 2));
		em.remove(em.getReference(Student.class, 2));
		em.getTransaction().commit();
		em.close();
		factory.close();
	}

	// 操作成功

	/**
	 * 删除失败,学生是关系被维护端无权更新外键
	 * 
	 */
	@Test
	public void deleteStudent() {
		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("mengya");
		EntityManager em = factory.createEntityManager();
		em.getTransaction().begin();
		em.remove(em.getReference(Student.class, 3));
		em.getTransaction().commit();
		em.close();
		factory.close();
	}

	/**
	 * 删除成功,老师是关系维护端有权更新外键
	 * 
	 */
	@Test
	public void deleteTeacher() {
		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("mengya");
		EntityManager em = factory.createEntityManager();
		em.getTransaction().begin();
		em.remove(em.getReference(Teacher.class, 3));
		em.getTransaction().commit();
		em.close();
		factory.close();
	}

}

 

相关标签: JPA