Java Tutorial/JPA/Many To Many Mapping

Материал из Java эксперт
Перейти к: навигация, поиск

Bidirectional Many To Many Mapping

File: Department.java



   <source lang="java">

import java.util.ArrayList; import java.util.Collection; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToMany; @Entity public class Department {

   @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
   private int id;
   private String name;
   @ManyToMany(mappedBy="departments")
   private Collection<Student> students;
   
   public Department(){
     students = new ArrayList<Student>();
   }
   
   public int getId() {
       return id;
   }
   
   public void setId(int id) {
       this.id = id;
   }
   
   public String getName() {
       return name;
   }
   
   public void setName(String deptName) {
       this.name = deptName;
   }
   public void addStudent(Student student) {
     if (!getStudents().contains(student)) {
         getStudents().add(student);
     }
     if (!student.getDepartments().contains(this)) {
         student.getDepartments().add(this);
     }
   }
   public Collection<Student> getStudents() {
     return students;
   }
   public void setStudent(Collection<Student> students) {
     this.students = students;
   }
   public String toString() {
       return "Department id: " + getId() + 
              ", name: " + getName();
   }

}</source>





JPA Creates Join Table For Many To Many Mapping

File: Student.java



   <source lang="java">

import java.util.ArrayList; import java.util.Collection; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToMany; @Entity public class Student {

 @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
 private int id;
 private String name;
 @ManyToMany 
 private Collection<Department> departments;
 public Student() {
   departments = new ArrayList<Department>();

}

 public int getId() {
   return id;
 }
 public void setId(int id) {
   this.id = id;
 }
 public String getName() {
   return name;
 }
 public void setName(String name) {
   this.name = name;
 }
 public void addDepartment(Department department) {
   if (!getDepartments().contains(department)) {
       getDepartments().add(department);
   }
   if (!department.getStudents().contains(this)) {
     department.getStudents().add(this);
   }
 }
 public Collection<Department> getDepartments() {
   return departments;
 }
 public void setDepartment(Collection<Department> departments) {
   this.departments = departments;
 }
 public String toString() {
   return "\n\nID:" + id + "\nName:" + name ;
 }

}</source>





Many To Many based on Collection

File: Project.java



   <source lang="java">

import java.util.ArrayList; import java.util.Collection; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToMany; @Entity public class Project {

   @Id
   protected int id;
   protected String name;
   @ManyToMany(mappedBy="projects")
   private Collection<Student> students;
   public Project() {
       students = new ArrayList<Student>();
   }
   public void setId(int i){
     id = i;
   }
   public int getId() {
       return id;
   }
   
   public String getName() {
       return name;
   }
   
   public Collection<Student> getStudents() {
       return students;
   }
   
   public String toString() {
       return "Project id: " + getId() + ", name: " + getName();
   }

}</source>





Many To Many Join Table Join Inverse Join Column

File: Student.java



   <source lang="java">

import java.util.ArrayList; import java.util.Collection; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; @Entity public class Student {

 @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
 private int id;
 private String name;
 @ManyToMany 
 @JoinTable(name="Student_Dept", 
     joinColumns=@JoinColumn(name="Stut_ID"),
     inverseJoinColumns=@JoinColumn(name="DEPT_ID"))  
 private Collection<Department> departments;
 public Student() {
   departments = new ArrayList<Department>();

}

 public int getId() {
   return id;
 }
 public void setId(int id) {
   this.id = id;
 }
 public String getName() {
   return name;
 }
 public void setName(String name) {
   this.name = name;
 }
 public void addDepartment(Department department) {
   if (!getDepartments().contains(department)) {
       getDepartments().add(department);
   }
   if (!department.getStudents().contains(this)) {
     department.getStudents().add(this);
   }
 }
 public Collection<Department> getDepartments() {
   return departments;
 }
 public void setDepartment(Collection<Department> departments) {
   this.departments = departments;
 }
 public String toString() {
   return "\n\nID:" + id + "\nName:" + name ;
 }

}</source>





Many To Many Mapping and Remove Operation

File: Project.java



   <source lang="java">

import java.util.ArrayList; import java.util.Collection; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToMany; @Entity public class Project {

   @Id
   protected int id;
   protected String name;
   @ManyToMany(mappedBy="projects")
   private Collection<Student> students;
   public Project() {
       students = new ArrayList<Student>();
   }
   public void setId(int i){
     id = i;
   }
   public int getId() {
       return id;
   }
   
   public String getName() {
       return name;
   }
   
   public Collection<Student> getStudents() {
       return students;
   }
   
   public String toString() {
       return "Project id: " + getId() + ", name: " + getName();
   }

}</source>