JPA中的多对多双向关联、级联操作、关系维护、延迟加载
2014-07-27 22:27
507 查看
package cn.itcast.bean; import java.util.Set; import java.util.HashSet; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; 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> student= new HashSet<Student>(); public Teacher(){} public Teacher(String name) { this.name = name; } @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; } @ManyToMany(cascade=CascadeType.REFRESH,mappedBy="teachers") public Set<Student> getStudent() { return student; } public void setStudent(Set<Student> student) { this.student = student; } @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; } }
package cn.itcast.bean; 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) { this.name = name; } @ManyToMany(cascade=CascadeType.REFRESH) @JoinTable(name="student_teacher",inverseJoinColumns=@JoinColumn(name="teahcer_id"),joinColumns=@JoinColumn(name="student_id")) public Set<Teacher> getTeachers() { return teachers; } public void setTeachers(Set<Teacher> teachers) { this.teachers = teachers; } public void addTeachers(Teacher teacher){ this.teachers.add(teacher); } public void removeTeahcer(Teacher teacher){ if(this.teachers.contains(teacher)){//用到了比较操作所以要在teacher类中重写equals方法和hashcode方法 this.teachers.remove(teacher); } } @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; } }
package junit.test; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.junit.BeforeClass; import org.junit.Test; import cn.itcast.bean.Student; import cn.itcast.bean.Teacher; public class ManyToManyTest { @BeforeClass public static void setUpBeforeClass() throws Exception { } @Test public void save(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); em.persist(new Student("小张")); em.persist(new Teacher("李勇老师")); em.getTransaction().commit(); em.close(); factory.close(); } /** * 建立学生跟老师的关系 */ @Test public void buildTS(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); Student student=em.find(Student.class,1); student.addTeachers(em.getReference(Teacher.class,1)); em.getTransaction().commit(); em.close(); factory.close(); } /** * 解除学生跟老师的关系 */ @Test public void deleteTS(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); Student student=em.find(Student.class,1); student.removeTeahcer(em.getReference(Teacher.class,1)); em.getTransaction().commit(); em.close(); factory.close(); } /** * 删除老师 */ @Test public void deleteTeacher(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); Student student=em.find(Student.class,1); Teacher teacher=em.getReference(Teacher.class,1); student.removeTeahcer(teacher); em.remove(teacher); em.getTransaction().commit(); em.close(); factory.close(); } /** * 删除学生 */ @Test public void deleteStudent(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); Student student=em.getReference(Student.class,1); em.remove(student); em.getTransaction().commit(); em.close(); factory.close(); } }
对比:
相关文章推荐
- JPA中的一对多双向关联、级联操作、关系维护、延迟加载
- 传智播客jpa详解视频教程(七):JPA中的一对多双向关联与级联操作、延迟加载与关系维护
- 06讲、JPA中的一对多双向关联与级联操作、迟加载、关系维护
- JPA学习---第九节:JPA中的一对多双向关联与级联操作
- JPA 一对多延迟加载与关系维护
- JPA学习记录六(JPA中的一对多双向关联与级联操作)
- jpa的联合主键,级联操作和延迟加载
- jpa中延迟加载和关系维护问题
- 08讲、JPA中的多对多双向关联实体定义、注解设置与各项关系操作
- [译文]JPA的实施模式:双向关联与延迟加载之间的矛盾
- JPA中多对多双向关联的各项关系操作
- 对JPA实体关系管理双向关联的一些思考
- 【Hibernate】(4)Hibernate的多表操作、级联操作与延迟加载
- EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载
- Hibernate中的延迟加载、实体关联单向一对多及双向一对多实体关联
- mysql优化----大数据下的分页,延迟关联,索引与排序的关系,重复索引与冗余索引,索引碎片与维护
- JAVAEE学习——hibernate03:多表操作详解、级联、关系维护和练习:添加联系人
- JPA中多对多关联延迟加载问题,failed to lazily initialize a collection of role
- java-hibernate框架4(hibernate多表操作,级联操作与延迟加载,多对多关系操作,hibernate缓存技术)
- jpa双向一对多级联操作