zoukankan      html  css  js  c++  java
  • JPA--多对多关系

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

    关系维护端:

     1 package com.yl.demo1.bean.manyTomany;
     2 
     3 import java.util.HashSet;
     4 import java.util.Set;
     5 
     6 import javax.persistence.CascadeType;
     7 import javax.persistence.Column;
     8 import javax.persistence.Entity;
     9 import javax.persistence.GeneratedValue;
    10 import javax.persistence.Id;
    11 import javax.persistence.JoinColumn;
    12 import javax.persistence.JoinTable;
    13 import javax.persistence.ManyToMany;
    14 
    15 @Entity
    16 public class Student {
    17     private Integer id;
    18     private String name;
    19     private Set<Teacher> teachers = new HashSet<Teacher>();
    20     
    21     
    22     public Student(){}
    23     
    24     public Student(String name) {
    25         super();
    26         this.name = name;
    27     }
    28     @Id @GeneratedValue
    29     public Integer getId() {
    30         return id;
    31     }
    32     public void setId(Integer id) {
    33         this.id = id;
    34     }
    35     @Column(length=10, nullable=false)
    36     public String getName() {
    37         return name;
    38     }
    39     public void setName(String name) {
    40         this.name = name;
    41     }
    42     /**
    43      * Student是关系的维护端
    44      * inverseJoinColumns和joinColumns是定义关联表中的字段,其中inverseJoinColumns定义关系被维护端的字段
    45      * joinColumns定义关系维护端的字段
    46      */
    47     @ManyToMany(cascade=CascadeType.REFRESH)
    48     @JoinTable(name="student_teacher", inverseJoinColumns=@JoinColumn(name="teacher_id"),
    49     joinColumns=@JoinColumn(name="student_id"))
    50     public Set<Teacher> getTeachers() {
    51         return teachers;
    52     }
    53     public void setTeachers(Set<Teacher> teachers) {
    54         this.teachers = teachers;
    55     }
    56     
    57     public void addTeacher(Teacher teacher) {
    58         this.teachers.add(teacher);
    59     }
    60     
    61     public void removeTeacher(Teacher teacher) {
    62         if (this.teachers.contains(teacher)) {
    63             this.teachers.remove(teacher);
    64         }
    65     }
    66 }

    关系被维护端:

     1 package com.yl.demo1.bean.manyTomany;
     2 
     3 import java.util.HashSet;
     4 import java.util.Set;
     5 
     6 import javax.persistence.CascadeType;
     7 import javax.persistence.Column;
     8 import javax.persistence.Entity;
     9 import javax.persistence.FetchType;
    10 import javax.persistence.GeneratedValue;
    11 import javax.persistence.Id;
    12 import javax.persistence.ManyToMany;
    13 
    14 @Entity
    15 public class Teacher {
    16     private Integer id;
    17     private String name;
    18     private Set<Student> students = new HashSet<Student>();
    19     
    20     public Teacher(){}
    21     
    22     public Teacher(String name) {
    23         super();
    24         this.name = name;
    25     }
    26     @Id @GeneratedValue
    27     public Integer getId() {
    28         return id;
    29     }
    30     public void setId(Integer id) {
    31         this.id = id;
    32     }
    33     @Column(length=10, nullable=false)
    34     public String getName() {
    35         return name;
    36     }
    37     public void setName(String name) {
    38         this.name = name;
    39     }
    40     //teacher为关系的被维护端
    41     @ManyToMany(cascade=CascadeType.REFRESH, mappedBy="teachers", fetch=FetchType.LAZY)
    42     public Set<Student> getStudents() {
    43         return students;
    44     }
    45     public void setStudents(Set<Student> students) {
    46         this.students = students;
    47     }
    48 
    49     @Override
    50     public int hashCode() {
    51         final int prime = 31;
    52         int result = 1;
    53         result = prime * result + ((id == null) ? 0 : id.hashCode());
    54         return result;
    55     }
    56 
    57     @Override
    58     public boolean equals(Object obj) {
    59         if (this == obj)
    60             return true;
    61         if (obj == null)
    62             return false;
    63         if (getClass() != obj.getClass())
    64             return false;
    65         Teacher other = (Teacher) obj;
    66         if (id == null) {
    67             if (other.id != null)
    68                 return false;
    69         } else if (!id.equals(other.id))
    70             return false;
    71         return true;
    72     }
    73     
    74     
    75     
    76     
    77 }

    常见操作:

     1 @Test
     2     public void save() {
     3         EntityManagerFactory factory = Persistence.createEntityManagerFactory("YL");
     4         EntityManager em = factory.createEntityManager();
     5         em.getTransaction().begin();//事务开始
     6         
     7         Student student = new Student("yyyy");
     8         em.persist(student);
     9         
    10         Teacher teacher = new Teacher("jiawenhui");
    11         em.persist(teacher);
    12         
    13         em.getTransaction().commit();
    14         em.close();
    15         factory.close();
    16     }
    17 
    18     /**
    19      * 建立学生与老师之间的关系
    20      */
    21     @Test
    22     public void buildConnection() {
    23         EntityManagerFactory factory = Persistence.createEntityManagerFactory("YL");
    24         EntityManager em = factory.createEntityManager();
    25         em.getTransaction().begin();//事务开始
    26         
    27         Student student = em.find(Student.class, 1);
    28         
    29         Teacher teacher = em.getReference(Teacher.class, 1);
    30         
    31         student.addTeacher(teacher);
    32         
    33         em.getTransaction().commit();
    34         em.close();
    35         factory.close();
    36     }
    37 
    38     /**
    39      * 解除学生与老师之间的关系
    40      */
    41     @Test
    42     public void deleteConnection() {
    43         EntityManagerFactory factory = Persistence.createEntityManagerFactory("YL");
    44         EntityManager em = factory.createEntityManager();
    45         em.getTransaction().begin();//事务开始
    46         
    47         Student student = em.find(Student.class, 1);
    48         
    49         Teacher teacher = em.getReference(Teacher.class, 1);
    50         
    51         student.removeTeacher(teacher);
    52         
    53         em.getTransaction().commit();
    54         em.close();
    55         factory.close();
    56     }
    57     
    58     /**
    59      * 删除老师(删除关系被维护端)
    60      */
    61     @Test
    62     public void deleteTeacher() {
    63         EntityManagerFactory factory = Persistence.createEntityManagerFactory("YL");
    64         EntityManager em = factory.createEntityManager();
    65         em.getTransaction().begin();//事务开始
    66         
    67         Student student = em.find(Student.class, 1);
    68         Teacher teacher = em.getReference(Teacher.class, 1);
    69         //先解除Student和Teacher之间的关系
    70         student.removeTeacher(teacher);
    71         //在删除Teacher
    72         em.remove(teacher);
    73         
    74         em.getTransaction().commit();
    75         em.close();
    76         factory.close();
    77     }
    78     
    79     /**
    80      * 删除学生(删除关系维护端)
    81      */
    82     @Test
    83     public void deleteStudent() {
    84         EntityManagerFactory factory = Persistence.createEntityManagerFactory("YL");
    85         EntityManager em = factory.createEntityManager();
    86         em.getTransaction().begin();//事务开始
    87         
    88         Student student = em.getReference(Student.class, 1);
    89         em.remove(student);
    90         
    91         em.getTransaction().commit();
    92         em.close();
    93         factory.close();
    94     }
    95     
  • 相关阅读:
    360网盘书籍分享
    oracle11g字符集问题之一
    order by 的列名不能参数化,要拼sql
    oracle11g的冷热备份
    Spring 事务管理的使用
    Spring 事务管理的API
    事务总结
    Excel 单元格中内容的换行
    手动配置IP地址
    MyBatis 三剑客
  • 原文地址:https://www.cnblogs.com/dreamfree/p/4077111.html
Copyright © 2011-2022 走看看