Java Tutorial/JPA/One To Many Mapping

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

One To Many Bidirectional

File: Department.java



   <source lang="java">

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

   @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
   private int id;
   private String name;
   @OneToMany(mappedBy="department")
   private Collection<Student> students;
   
   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 Collection<Student> getStudents() {
     return students;
   }
   public void setStudent(Collection<Student> students) {
     this.students = students;
   }
   public String toString() {
       return "Department id: " + getId() + 
              ", name: " + getName();
   }

}</source>





One To Many Cascade.All

File: Student.java



   <source lang="java">

import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; @Entity public class Student {

 @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
 private int id;
 private String name;
 @ManyToOne(cascade=CascadeType.ALL)
 private Department 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 Department getDepartment() {
   return department;
 }
 public void setDepartment(Department department) {
   this.department = department;
 }
 public String toString() {
   return "\n\nID:" + id + "\nName:" + name + "\n\n";
 }

}</source>





One To Many Join Table Setup

File: Phone.java



   <source lang="java">

import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Phone {

   @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
   private int id;
   @Column(name="NUM")
   private String number;
   private String type;
   
   public int getId() {
       return id;
   }
   
   public void setId(int id) {
       this.id = id;
   }
   
   public String getNumber() {
       return number;
   }
   
   public void setNumber(String phoneNo) {
       this.number = phoneNo;
   }
   
   public String getType() {
       return type;
   }
   
   public void setType(String phoneType) {
       this.type = phoneType;
   }
   public String toString() {
       return "Phone id: " + getId() + 
              ", no: " + getNumber() +
              ", type: " + getType();
   }

}</source>





One To Many List Collection

File: Student.java



   <source lang="java">

import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; @Entity public class Student {

   @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
   private int id;
   private String name;
   
   @ManyToOne
   private Department 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 Department getDepartment() {
       return department;
   }
   
   public void setDepartment(Department department) {
       this.department = department;
   }
   public String toString() {
       return "Student id: " + getId() + " name: " + getName() + 
              " with " + getDepartment();
   }

}</source>





One To Many Map Collection

File: Department.java



   <source lang="java">

import java.util.HashMap; import java.util.Map; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MapKey; import javax.persistence.OneToMany; @Entity public class Department {

   @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
   private int id;
   private String name;
   @OneToMany(mappedBy="department")
   @MapKey(name="name")
   private Map<String, Student> students;
   public Department() {
       students = new HashMap<String, 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().containsKey(student.getName())) {
           getStudents().put(student.getName(), student);
           if (student.getDepartment() != null) {
               student.getDepartment().getStudents().remove(student.getName());
           }
           student.setDepartment(this);
       }
   }
   
   public Map<String,Student> getStudents() {
       return students;
   }
   public String toString() {
       return "Department id: " + getId() + 
              ", name: " + getName();
   }

}</source>





One To Many With Mapped By To remove Mapping Table

File: Department.java



   <source lang="java">

import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; @Entity public class Department {

   @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
   private int id;
   private String name;
   @OneToMany(mappedBy="department",cascade=CascadeType.ALL)
   private Set<Student> students;
   
   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 Set<Student> getStudents() {
     return students;
   }
   public void setStudent(Set<Student> students) {
     this.students = students;
   }
   public String toString() {
       return "Department id: " + getId() + 
              ", name: " + getName()+"Student:"+ students;
   }

}</source>





One To Many With Order By Setting

File: Department.java



   <source lang="java">

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

   @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
   private int id;
   private String name;
   @OneToMany(mappedBy="department")
   @OrderBy("name ASC")
   private List<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.getDepartment() != null) {
               student.getDepartment().getStudents().remove(student);
           }
           student.setDepartment(this);
       }
   }
   
   public Collection<Student> getStudents() {
       return students;
   }
   public String toString() {
       return "Department id: " + getId() + 
              ", name: " + getName();
   }

}</source>





Set target Entity For One To Many Mapping

File: Student.java



   <source lang="java">

import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; @Entity public class Student {

 @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
 private int id;
 private String name;
 @ManyToOne
 private Department 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 Department getDepartment() {
   return department;
 }
 public void setDepartment(Department department) {
   this.department = department;
 }
 public String toString() {
   return "\n\nID:" + id + "\nName:" + name ;
 }

}</source>





Use Collection In One To Many Mapping

File: Department.java



   <source lang="java">

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

   @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
   private int id;
   private String name;
   @OneToMany(mappedBy="department")
   private Collection<Student> students;
   
   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 Collection<Student> getStudents() {
     return students;
   }
   public void setStudent(Collection<Student> students) {
     this.students = students;
   }
   public String toString() {
       return "Department id: " + getId() + 
              ", name: " + getName();
   }

}</source>