JPA - Mối quan hệ thực thể
Chương này sẽ đưa bạn qua các mối quan hệ giữa các Thực thể. Nói chung các mối quan hệ hiệu quả hơn giữa các bảng trong cơ sở dữ liệu. Ở đây, các lớp thực thể được coi là bảng quan hệ (khái niệm của JPA), do đó mối quan hệ giữa các lớp Thực thể như sau:
- @ManyToOne Relation
- @OneToMany Relation
- @OneToOne Relation
- @ManyToMany Relation
@ManyToOne Relation
Mối quan hệ Nhiều-Một giữa các thực thể: Trong đó một thực thể (cột hoặc tập hợp các cột) được / được tham chiếu với một thực thể khác (cột hoặc tập hợp các cột) chứa các giá trị duy nhất. Trong cơ sở dữ liệu quan hệ, các quan hệ này có thể áp dụng bằng cách sử dụng khóa ngoại / khóa chính giữa các bảng.
Chúng ta hãy xem xét một ví dụ về mối quan hệ giữa các thực thể Nhân viên và Bộ phận. Theo cách đơn hướng, có thể áp dụng mối quan hệ từ Nhân viên đến Bộ phận, Nhiều Người với Một. Điều đó có nghĩa là mỗi bản ghi của nhân viên chứa một id bộ phận, mã này phải là khóa chính trong bảng Bộ phận. Ở đây trong bảng Nhân viên, id Phòng ban là Khóa ngoại.
Sơ đồ giải thích mối quan hệ Nhiều-Một như sau:
Tạo một dự án JPA trong IDE eclipse có tên JPA_Eclipselink_MTO. Tất cả các mô-đun của dự án này được hiển thị như sau:
Tạo thực thể
Làm theo sơ đồ đã cho ở trên để tạo các thực thể. Tạo một gói có tên‘com.tutorialspoin.eclipselink.entity’ Dưới ‘src’gói hàng. Tạo một lớp có tênDepartment.javatheo gói nhất định. Thực thể Bộ phận lớp được hiển thị như sau:
package com.tutorialspoint.eclipselink.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Department {
@Id
@GeneratedValue( strategy=GenerationType.AUTO )
private int id;
private String name;
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;
}
}
Tạo thực thể thứ hai trong mối quan hệ này - Lớp thực thể nhân viên có tên Employee.java Dưới ‘com.tutorialspoint.eclipselink.entity’gói hàng. Lớp thực thể Nhân viên được hiển thị như sau:
package com.tutorialspoint.eclipselink.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
@Entity
public class Employee{
@Id
@GeneratedValue( strategy= GenerationType.AUTO )
private int eid;
private String ename;
private double salary;
private String deg;
@ManyToOne
private Department department;
public Employee(int eid, String ename, double salary, String deg) {
super( );
this.eid = eid;
this.ename = ename;
this.salary = salary;
this.deg = deg;
}
public Employee( ) {
super();
}
public int getEid( ) {
return eid;
}
public void setEid(int eid) {
this.eid = eid;
}
public String getEname( ) {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public double getSalary( ) {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getDeg( ) {
return deg;
}
public void setDeg(String deg) {
this.deg = deg;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
}
Persistence.xml
Tệp Persistence.xml được yêu cầu để cấu hình cơ sở dữ liệu và đăng ký các lớp thực thể.
Persitence.xml sẽ được tạo bởi IDE eclipse trong khi tạo Dự án JPA. Các chi tiết cấu hình là thông số kỹ thuật của người dùng. Tệp Persence.xml được hiển thị như sau:
<?xml version="1.0" encoding = "UTF-8"?>
<persistence version = "2.0"
xmlns = "http://java.sun.com/xml/ns/persistence"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name = "Eclipselink_JPA" transaction-type = "RESOURCE_LOCAL">
<class>com.tutorialspoint.eclipselink.entity.Employee</class>
<class>com.tutorialspoint.eclipselink.entity.Department</class>
<properties>
<property name = "javax.persistence.jdbc.url" value = "jdbc:mysql://localhost:3306/jpadb"/>
<property name = "javax.persistence.jdbc.user" value = "root"/>
<property name = "javax.persistence.jdbc.password" value="root"/>
<property name = "javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name = "eclipselink.logging.level" value = "FINE"/>
<property name = "eclipselink.ddl-generation" value = "create-tables"/>
</properties>
</persistence-unit>
</persistence>
Các lớp dịch vụ
Mô-đun này chứa các lớp dịch vụ, thực hiện phần quan hệ bằng cách sử dụng phần khởi tạo thuộc tính. Tạo một gói dưới‘src’ gói có tên ‘com.tutorialspoint.eclipselink.service’. Lớp DAO có tênManyToOne.javađược tạo theo gói nhất định. Lớp DAO được hiển thị như sau:
package com.tutorialspointeclipselink.service;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Department;
import com.tutorialspoint.eclipselink.entity.Employee;
public class ManyToOne {
public static void main( String[ ] args ) {
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
EntityManager entitymanager = emfactory.createEntityManager( );
entitymanager.getTransaction( ).begin( );
//Create Department Entity
Department department = new Department();
department.setName("Development");
//Store Department
entitymanager.persist(department);
//Create Employee1 Entity
Employee employee1 = new Employee();
employee1.setEname("Satish");
employee1.setSalary(45000.0);
employee1.setDeg("Technical Writer");
employee1.setDepartment(department);
//Create Employee2 Entity
Employee employee2 = new Employee();
employee2.setEname("Krishna");
employee2.setSalary(45000.0);
employee2.setDeg("Technical Writer");
employee2.setDepartment(department);
//Create Employee3 Entity
Employee employee3 = new Employee();
employee3.setEname("Masthanvali");
employee3.setSalary(50000.0);
employee3.setDeg("Technical Writer");
employee3.setDepartment(department);
//Store Employees
entitymanager.persist(employee1);
entitymanager.persist(employee2);
entitymanager.persist(employee3);
entitymanager.getTransaction().commit();
entitymanager.close();
emfactory.close();
}
}
Sau khi biên dịch và thực thi chương trình trên, bạn sẽ nhận được thông báo trong bảng điều khiển của Eclipse IDE. Đối với đầu ra, hãy kiểm tra bàn làm việc MySQL. Trong ví dụ này, hai bảng được tạo.
Chuyển truy vấn sau trong giao diện MySQL và kết quả là Department bảng ở định dạng bảng được hiển thị như sau trong truy vấn:
Select * from department;
Id Name
101 Development
Chuyển truy vấn sau trong giao diện MySQL và kết quả là Employee bảng ở định dạng bảng được hiển thị như sau trong truy vấn:
Select * from employee;
Eid Deg Ename Salary Department_Id
102 Technical Writer Satish 45000 101
103 Technical Writer Krishna 45000 101
104 Technical Writer Masthan Wali 50000 101
Trong bảng trên Deparment_Id là khóa ngoại (trường tham chiếu) từ bảng Department.
@OneToMany Relation
Trong mối quan hệ này, mỗi hàng của một thực thể được tham chiếu đến nhiều bản ghi con trong thực thể khác. Điều quan trọng là hồ sơ con không được có nhiều cha mẹ. Trong mối quan hệ một-nhiều giữa Bảng A và Bảng B, mỗi hàng trong Bảng A được liên kết với 0, 1 hoặc nhiều hàng trong Bảng B.
Chúng ta hãy xem xét ví dụ trên. NếuEmployee và Departmentlà theo cách một chiều ngược lại, quan hệ là quan hệ Nhiều-Một. Tạo một dự án JPA trong IDE eclipse có tênJPA_Eclipselink_OTM. Tất cả các mô-đun của dự án này được hiển thị như sau:
Tạo thực thể
Làm theo sơ đồ đã cho ở trên để tạo các thực thể. Tạo một gói có tên‘com.tutorialspoin.eclipselink.entity’ Dưới ‘src’gói hàng. Tạo một lớp có tênDepartment.javatheo gói nhất định. Thực thể Bộ phận lớp được hiển thị như sau:
package com.tutorialspoint.eclipselink.entity;
import java.util.List;
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.AUTO )
private int id;
private String name;
@OneToMany( targetEntity=Employee.class )
private List employeelist;
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 List getEmployeelist() {
return employeelist;
}
public void setEmployeelist(List employeelist) {
this.employeelist = employeelist;
}
}
Tạo thực thể thứ hai trong mối quan hệ này -Lớp thực thể nhân viên, có tên Employee.java Dưới ‘com.tutorialspoint.eclipselink.entity’gói hàng. Lớp thực thể Nhân viên được hiển thị như sau:
package com.tutorialspoint.eclipselink.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Employee {
@Id
@GeneratedValue( strategy= GenerationType.AUTO )
private int eid;
private String ename;
private double salary;
private String deg;
public Employee(int eid, String ename, double salary, String deg) {
super( );
this.eid = eid;
this.ename = ename;
this.salary = salary;
this.deg = deg;
}
public Employee( ) {
super();
}
public int getEid( ) {
return eid;
}
public void setEid(int eid) {
this.eid = eid;
}
public String getEname( ) {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public double getSalary( ) {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getDeg( ) {
return deg;
}
public void setDeg(String deg) {
this.deg = deg;
}
}
Persistence.xml
Persistence.xml sẽ được tạo bởi IDE eclipse trong khi tạo Dự án JPA. Các chi tiết cấu hình là thông số kỹ thuật của người dùng. Tệp Persence.xml được hiển thị như sau:
<?xml version = "1.0" encoding = "UTF-8"?>
<persistence version = "2.0" xmlns = "http://java.sun.com/xml/ns/persistence"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name = "Eclipselink_JPA" transaction-type = "RESOURCE_LOCAL">
<class>com.tutorialspoint.eclipselink.entity.Employee</class>
<class>com.tutorialspoint.eclipselink.entity.Department</class>
<properties>
<property name = "javax.persistence.jdbc.url" value = "jdbc:mysql://localhost:3306/jpadb"/>
<property name = "javax.persistence.jdbc.user" value = "root"/>
<property name = "javax.persistence.jdbc.password" value = "root"/>
<property name = "javax.persistence.jdbc.driver" value = "com.mysql.jdbc.Driver"/>
<property name = "eclipselink.logging.level" value = "FINE"/>
<property name = "eclipselink.ddl-generation" value = "create-tables"/>
</properties>
</persistence-unit>
</persistence>
Các lớp dịch vụ
Mô-đun này chứa các lớp dịch vụ, thực hiện phần quan hệ bằng cách sử dụng phần khởi tạo thuộc tính. Tạo một gói dưới‘src’ gói có tên ‘com.tutorialspoint.eclipselink.service’. Lớp DAO có tênOneToMany.javađược tạo theo gói nhất định. Lớp DAO được hiển thị như sau:
package com.tutorialspointeclipselink.service;
import java.util.List;
import java.util.ArrayList;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Department;
import com.tutorialspoint.eclipselink.entity.Employee;
public class OneToMany {
public static void main(String[] args) {
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
EntityManager entitymanager = emfactory.createEntityManager( );
entitymanager.getTransaction( ).begin( );
//Create Employee1 Entity
Employee employee1 = new Employee();
employee1.setEname("Satish");
employee1.setSalary(45000.0);
employee1.setDeg("Technical Writer");
//Create Employee2 Entity
Employee employee2 = new Employee();
employee2.setEname("Krishna");
employee2.setSalary(45000.0);
employee2.setDeg("Technical Writer");
//Create Employee3 Entity
Employee employee3 = new Employee();
employee3.setEname("Masthanvali");
employee3.setSalary(50000.0);
employee3.setDeg("Technical Writer");
//Store Employee
entitymanager.persist(employee1);
entitymanager.persist(employee2);
entitymanager.persist(employee3);
//Create Employeelist
List<Employee> emplist = new ArrayList();
emplist.add(employee1);
emplist.add(employee2);
emplist.add(employee3);
//Create Department Entity
Department department = new Department();
department.setName("Development");
department.setEmployeelist(emplist);
//Store Department
entitymanager.persist(department);
entitymanager.getTransaction().commit();
entitymanager.close();
emfactory.close();
}
}
Sau khi biên dịch và thực thi chương trình trên, bạn sẽ nhận được thông báo trong bảng điều khiển của Eclipse IDE. Để kiểm tra đầu ra MySQL workbench như sau. Trong dự án này, ba bảng được tạo.
Chuyển truy vấn sau trong giao diện MySQL và kết quả là department_employee bảng ở định dạng bảng được hiển thị như sau trong truy vấn:
Select * from department_Id;
Department_Id Employee_Eid
254 251
254 252
254 253
Trong bảng trên, các trường deparment_id và worker_id là các khóa ngoại (trường tham chiếu) từ các bảng của bộ phận và nhân viên.
Chuyển truy vấn sau trong giao diện MySQL và kết quả của bảng bộ phận ở định dạng bảng được hiển thị như sau trong truy vấn:
Select * from department;
Id Name
254 Development
Chuyển truy vấn sau trong giao diện MySQL và kết quả của bảng nhân viên ở định dạng bảng được hiển thị như sau trong truy vấn:
Select * from employee;
Eid Deg Ename Salary
251 Technical Writer Satish 45000
252 Technical Writer Krishna 45000
253 Technical Writer Masthanvali 50000
@OneToOne Relation
Trong mối quan hệ Một-Một, một mục chỉ có thể thuộc về một mục khác. Nó có nghĩa là mỗi hàng của một thực thể được tham chiếu đến một và chỉ một hàng của thực thể khác.
Chúng ta hãy xem xét ví dụ trên. Employee và Departmenttheo cách đơn hướng ngược lại, quan hệ là quan hệ Một-Một. Nó có nghĩa là mỗi nhân viên chỉ thuộc về một bộ phận. Tạo một dự án JPA trong IDE eclipse có tênJPA_Eclipselink_OTO. Tất cả các mô-đun của dự án này được hiển thị như sau:
Tạo thực thể
Làm theo sơ đồ đã cho ở trên để tạo các thực thể. Tạo một gói có tên‘com.tutorialspoin.eclipselink.entity’ Dưới ‘src’gói hàng. Tạo một lớp có tênDepartment.javatheo gói nhất định. Thực thể Bộ phận lớp được hiển thị như sau:
package com.tutorialspoint.eclipselink.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Department {
@Id
@GeneratedValue( strategy=GenerationType.AUTO )
private int id;
private String name;
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;
}
}
Tạo thực thể thứ hai trong mối quan hệ này -Lớp thực thể nhân viên, có tên Employee.java Dưới ‘com.tutorialspoint.eclipselink.entity’gói hàng. Lớp thực thể Nhân viên được hiển thị như sau:
package com.tutorialspoint.eclipselink.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class Employee {
@Id
@GeneratedValue( strategy= GenerationType.AUTO )
private int eid;
private String ename;
private double salary;
private String deg;
@OneToOne
private Department department;
public Employee(int eid, String ename, double salary, String deg) {
super( );
this.eid = eid;
this.ename = ename;
this.salary = salary;
this.deg = deg;
}
public Employee( ) {
super();
}
public int getEid( ) {
return eid;
}
public void setEid(int eid) {
this.eid = eid;
}
public String getEname( ) {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public double getSalary( ) {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getDeg( ) {
return deg;
}
public void setDeg(String deg) {
this.deg = deg;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
}
Persistence.xml
Persistence.xml sẽ được tạo bởi IDE eclipse trong khi tạo Dự án JPA. Các chi tiết cấu hình là thông số kỹ thuật của người dùng. Tệp Persence.xml được hiển thị như sau:
<?xml version = "1.0" encoding = "UTF-8"?>
<persistence version = "2.0" xmlns = "http://java.sun.com/xml/ns/persistence"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name = "Eclipselink_JPA" transaction-type = "RESOURCE_LOCAL">
<class>com.tutorialspoint.eclipselink.entity.Employee</class>
<class>com.tutorialspoint.eclipselink.entity.Department</class>
<properties>
<property name = "javax.persistence.jdbc.url" value = "jdbc:mysql://localhost:3306/jpadb"/>
<property name = "javax.persistence.jdbc.user" value = "root"/>
<property name = "javax.persistence.jdbc.password" value = "root"/>
<property name = "javax.persistence.jdbc.driver" value = "com.mysql.jdbc.Driver"/>
<property name = "eclipselink.logging.level" value = "FINE"/>
<property name = "eclipselink.ddl-generation" value = "create-tables"/>
</properties>
</persistence-unit>
</persistence>
Các lớp dịch vụ
Mô-đun này chứa các lớp dịch vụ, thực hiện phần quan hệ bằng cách sử dụng phần khởi tạo thuộc tính. Tạo một gói dưới‘src’ gói có tên ‘com.tutorialspoint.eclipselink.service’. Lớp DAO có tênOneToOne.javađược tạo theo gói đã cho. Lớp DAO được hiển thị như sau:
package com.tutorialspointeclipselink.service;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Department;
import com.tutorialspoint.eclipselink.entity.Employee;
public class OneToOne {
public static void main(String[] args) {
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
EntityManager entitymanager = emfactory.createEntityManager( );
entitymanager.getTransaction( ).begin( );
//Create Department Entity
Department department = new Department();
department.setName("Development");
//Store Department
entitymanager.persist(department);
//Create Employee Entity
Employee employee = new Employee();
employee.setEname("Satish");
employee.setSalary(45000.0);
employee.setDeg("Technical Writer");
employee.setDepartment(department);
//Store Employee
entitymanager.persist(employee);
entitymanager.getTransaction().commit();
entitymanager.close();
emfactory.close();
}
}
Sau khi biên dịch và thực thi chương trình trên, bạn sẽ nhận được thông báo trong bảng điều khiển của Eclipse IDE. Đối với đầu ra, hãy kiểm tra MySQL workbench như sau. Trong ví dụ trên, hai bảng được tạo.
Chuyển truy vấn sau trong giao diện MySQL và kết quả là department bảng ở định dạng bảng được hiển thị như sau trong truy vấn:
Select * from department
Id Name
301 Development
Chuyển truy vấn sau trong giao diện MySQL và kết quả là employee bảng ở định dạng bảng được hiển thị như sau trong truy vấn:
Select * from employee
Eid Deg Ename Salary Department_id
302 Technical Writer Satish 45000 301
@ManyToMany Relation
Mối quan hệ Nhiều-Nhiều là nơi một hoặc nhiều hàng từ một thực thể được liên kết với nhiều hàng trong thực thể khác.
Chúng ta hãy xem xét một ví dụ về mối quan hệ giữa các thực thể Lớp và Giáo viên. Theo cách hai chiều, cả Lớp và Giáo viên đều có mối quan hệ Nhiều người với Một. Điều đó có nghĩa là mỗi bản ghi của Lớp học được tham chiếu bởi tập hợp Giáo viên (id giáo viên), chúng phải là khóa chính trong bảng Giáo viên và được lưu trữ trong bảng Giáo viên_Class và ngược lại. Ở đây, bảng Teacher_Class chứa cả hai trường Khóa ngoại. Tạo một dự án JPA trong IDE eclipse có tênJPA_Eclipselink_MTM. Tất cả các mô-đun của dự án này được hiển thị như sau:
Tạo thực thể
Làm theo sơ đồ đã cho ở trên để tạo các thực thể. Tạo một gói có tên‘com.tutorialspoin.eclipselink.entity’ Dưới ‘src’gói hàng. Tạo một lớp có tênClas.javatheo gói nhất định. Thực thể Bộ phận lớp được hiển thị như sau:
package com.tutorialspoint.eclipselink.entity;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
@Entity
public class Clas {
@Id
@GeneratedValue( strategy = GenerationType.AUTO )
private int cid;
private String cname;
@ManyToMany(targetEntity=Teacher.class)
private Set teacherSet;
public Clas(){
super();
}
public Clas(int cid, String cname, Set teacherSet) {
super();
this.cid = cid;
this.cname = cname;
this.teacherSet = teacherSet;
}
public int getCid(){
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public Set getTeacherSet() {
return teacherSet;
}
public void setTeacherSet(Set teacherSet) {
this.teacherSet = teacherSet;
}
}
Tạo thực thể thứ hai trong mối quan hệ này -Lớp thực thể nhân viên, có tên Teacher.java Dưới ‘com.tutorialspoint.eclipselink.entity’gói hàng. Lớp thực thể Nhân viên được hiển thị như sau:
package com.tutorialspoint.eclipselink.entity;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
@Entity
public class Teacher {
@Id
@GeneratedValue( strategy = GenerationType.AUTO )
private int tid;
private String tname;
private String subject;
@ManyToMany(targetEntity = Clas.class)
private Set clasSet;
public Teacher(){
super();
}
public Teacher(int tid, String tname, String subject, Set clasSet) {
super();
this.tid = tid;
this.tname = tname;
this.subject = subject;
this.clasSet = clasSet;
}
public int getTid() {
return tid;
}
public void setTid(int tid) {
this.tid = tid;
}
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public Set getClasSet() {
return clasSet;
}
public void setClasSet(Set clasSet) {
this.clasSet = clasSet;
}
}
Persistence.xml
Persistence.xml sẽ được tạo bởi IDE eclipse trong khi tạo một Dự án JPA. Các chi tiết cấu hình là thông số kỹ thuật của người dùng. Tệp Persence.xml được hiển thị như sau:
<?xml version = "1.0" encoding = "UTF-8"?>
<persistence version = "2.0" xmlns = "http://java.sun.com/xml/ns/persistence"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name = "Eclipselink_JPA" transaction-type = "RESOURCE_LOCAL">
<class>com.tutorialspoint.eclipselink.entity.Employee</class>
<class>com.tutorialspoint.eclipselink.entity.Department</class>
<properties>
<property name = "javax.persistence.jdbc.url" value = "jdbc:mysql://localhost:3306/jpadb"/>
<property name = "javax.persistence.jdbc.user" value = "root"/>
<property name = "javax.persistence.jdbc.password" value = "root"/>
<property name = "javax.persistence.jdbc.driver" value = "com.mysql.jdbc.Driver"/>
<property name = "eclipselink.logging.level" value = "FINE"/>
<property name = "eclipselink.ddl-generation" value = "create-tables"/>
</properties>
</persistence-unit>
</persistence>
Các lớp dịch vụ
Mô-đun này chứa các lớp dịch vụ, thực hiện phần quan hệ bằng cách sử dụng phần khởi tạo thuộc tính. Tạo một gói dưới‘src’ gói có tên ‘com.tutorialspoint.eclipselink.service’. Lớp DAO có tênManyToMany.javađược tạo theo gói nhất định. Lớp DAO được hiển thị như sau:
package com.tutorialspoint.eclipselink.service;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Clas;
import com.tutorialspoint.eclipselink.entity.Teacher;
public class ManyToMany {
public static void main(String[] args) {
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
EntityManager entitymanager = emfactory.createEntityManager( );
entitymanager.getTransaction( ).begin( );
//Create Clas Entity
Clas clas1 = new Clas(0, "1st", null);
Clas clas2 = new Clas(0, "2nd", null);
Clas clas3 = new Clas(0, "3rd", null);
//Store Clas
entitymanager.persist(clas1);
entitymanager.persist(clas2);
entitymanager.persist(clas3);
//Create Clas Set1
Set<Clas> classSet1 = new HashSet();
classSet1.add(clas1);
classSet1.add(clas2);
classSet1.add(clas3);
//Create Clas Set2
Set<Clas> classSet2 = new HashSet();
classSet2.add(clas3);
classSet2.add(clas1);
classSet2.add(clas2);
//Create Clas Set3
Set<Clas> classSet3 = new HashSet();
classSet3.add(clas2);
classSet3.add(clas3);
classSet3.add(clas1);
//Create Teacher Entity
Teacher teacher1 = new Teacher(0, "Satish","Java",classSet1);
Teacher teacher2 = new Teacher(0, "Krishna","Adv Java",classSet2);
Teacher teacher3 = new Teacher(0, "Masthanvali","DB2",classSet3);
//Store Teacher
entitymanager.persist(teacher1);
entitymanager.persist(teacher2);
entitymanager.persist(teacher3);
entitymanager.getTransaction( ).commit( );
entitymanager.close( );
emfactory.close( );
}
}
Sau khi biên dịch và thực thi chương trình trên, bạn sẽ nhận được thông báo trong bảng điều khiển của Eclipse IDE. Đối với đầu ra, hãy kiểm tra MySQL workbench như sau. Trong dự án ví dụ này, ba bảng được tạo.
Chuyển truy vấn sau trong giao diện MySQL và kết quả là teacher_clas bảng ở định dạng bảng được hiển thị như sau trong truy vấn.
Select * form teacher_clas;
Teacher _tid Classet_cid
354 351
355 351
356 351
354 352
355 352
356 352
354 353
355 353
356 353
Trong bảng trên, teacher_tid là khóa ngoại từ bảng giáo viên và classet_cid là khóa ngoại từ bảng lớp. Do đó, các giáo viên khác nhau được phân bổ cho các lớp khác nhau.
Chuyển truy vấn sau trong giao diện MySQL và kết quả của bảng giáo viên ở định dạng bảng được hiển thị như sau trong truy vấn:
Select * from teacher;
Tid Subject Tname
354 Java Satish
355 Adv Java Krishna
356 DB2 Masthanvali
Chuyển truy vấn sau trong giao diện MySQL và kết quả là clas bảng ở định dạng bảng được hiển thị như sau trong truy vấn:
Select * from clas;
cid Cname
351 1st
352 2nd
353 3rd