JPA - relacje między podmiotami
Ten rozdział poprowadzi cię przez relacje między bytami. Generalnie relacje są bardziej efektywne między tabelami w bazie danych. Tutaj klasy jednostek są traktowane jako tabele relacyjne (koncepcja JPA), dlatego relacje między klasami jednostek są następujące:
- @ManyToOne Relation
- @OneToMany Relation
- @OneToOne Relacja
- @ManyToMany Relation
@ManyToOne Relation
Relacja wiele-do-jednego między jednostkami: gdzie do jednej jednostki (kolumny lub zestawu kolumn) odwołuje się inna jednostka (kolumna lub zestaw kolumn), która zawiera unikatowe wartości. W relacyjnych bazach danych te relacje są stosowane przy użyciu klucza obcego / klucza podstawowego między tabelami.
Rozważmy przykład relacji między jednostkami Pracownik i Dział. W sposób jednokierunkowy, tj. Od pracownika do działu, obowiązuje relacja wiele do jednego. Oznacza to, że każdy rekord pracownika zawiera jeden identyfikator działu, który powinien być kluczem podstawowym w tabeli Dział. W tabeli Pracownik identyfikator działu to klucz obcy.
Diagram wyjaśnia relację wiele do jednego w następujący sposób:
Utwórz projekt JPA w środowisku Eclipse IDE o nazwie JPA_Eclipselink_MTO. Wszystkie moduły tego projektu przedstawiono w następujący sposób:
Tworzenie jednostek
Postępuj zgodnie z podanym powyżej schematem tworzenia jednostek. Utwórz pakiet o nazwie‘com.tutorialspoin.eclipselink.entity’ pod ‘src’pakiet. Utwórz klasę o nazwieDepartment.javapod danym pakietem. Jednostka klasy Dział jest pokazana w następujący sposób:
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;
}
}
Utwórz drugą jednostkę w tej relacji - o nazwie Klasa jednostki pracownika Employee.java pod ‘com.tutorialspoint.eclipselink.entity’pakiet. Klasa jednostki pracownika jest przedstawiona w następujący sposób:
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
Plik Persistence.xml jest wymagany do skonfigurowania bazy danych i rejestracji klas jednostek.
Persitence.xml zostanie utworzony przez eclipse IDE podczas tworzenia projektu JPA. Szczegóły konfiguracji są specyfikacjami użytkownika. Plik persistence.xml jest wyświetlany w następujący sposób:
<?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>
Klasy usług
Ten moduł zawiera klasy usług, które implementują część relacyjną przy użyciu inicjalizacji atrybutu. Utwórz pakiet pod‘src’ pakiet o nazwie ‘com.tutorialspoint.eclipselink.service’. Klasa DAO o nazwieManyToOne.javajest tworzony w ramach danego pakietu. Klasa DAO jest przedstawiona w następujący sposób:
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();
}
}
Po skompilowaniu i wykonaniu powyższego programu otrzymasz powiadomienia w panelu konsoli Eclipse IDE. Aby uzyskać dane wyjściowe, sprawdź Środowisko robocze MySQL. W tym przykładzie tworzone są dwie tabele.
Przekaż następujące zapytanie w interfejsie MySQL i wynik Department tabela w formacie tabelarycznym jest wyświetlana w zapytaniu w następujący sposób:
Select * from department;
Id Name
101 Development
Przekaż następujące zapytanie w interfejsie MySQL i wynik Employee tabela w formacie tabelarycznym jest wyświetlana w zapytaniu w następujący sposób:
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
W powyższej tabeli Deparment_Id jest kluczem obcym (polem referencyjnym) z tabeli Dział.
@OneToMany Relation
W tej relacji każdy wiersz jednej encji odnosi się do wielu rekordów podrzędnych w innej encji. Ważne jest to, że rekordy podrzędne nie mogą mieć wielu rodziców. W relacji jeden do wielu między tabelą A i tabelą B każdy wiersz w tabeli A jest powiązany z 0, 1 lub wieloma wierszami w tabeli B.
Rozważmy powyższy przykład. GdybyEmployee i Departmentjest odwrócona jednokierunkowo, relacja jest relacją wiele do jednego. Utwórz projekt JPA w środowisku Eclipse IDE o nazwieJPA_Eclipselink_OTM. Wszystkie moduły tego projektu przedstawiono w następujący sposób:
Tworzenie jednostek
Postępuj zgodnie z podanym powyżej schematem tworzenia jednostek. Utwórz pakiet o nazwie‘com.tutorialspoin.eclipselink.entity’ pod ‘src’pakiet. Utwórz klasę o nazwieDepartment.javapod danym pakietem. Jednostka klasy Dział jest pokazana w następujący sposób:
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;
}
}
Utwórz drugą jednostkę w tej relacji - klasa jednostki pracownika o nazwie Employee.java pod ‘com.tutorialspoint.eclipselink.entity’pakiet. Klasa jednostki pracownika jest przedstawiona w następujący sposób:
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 zostanie utworzony przez eclipse IDE podczas tworzenia projektu JPA. Szczegóły konfiguracji są specyfikacjami użytkownika. Plik persistence.xml jest wyświetlany w następujący sposób:
<?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>
Klasy usług
Ten moduł zawiera klasy usług, które implementują część relacyjną przy użyciu inicjalizacji atrybutu. Utwórz pakiet pod‘src’ pakiet o nazwie ‘com.tutorialspoint.eclipselink.service’. Klasa DAO o nazwieOneToMany.javajest tworzony w ramach danego pakietu. Klasa DAO jest przedstawiona w następujący sposób:
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();
}
}
Po skompilowaniu i wykonaniu powyższego programu otrzymasz powiadomienia w panelu konsoli Eclipse IDE. Aby uzyskać dane wyjściowe, sprawdź Środowisko pracy MySQL w następujący sposób. W tym projekcie tworzone są trzy tabele.
Przekaż następujące zapytanie w interfejsie MySQL i wynik department_employee tabela w formacie tabelarycznym jest wyświetlana w zapytaniu w następujący sposób:
Select * from department_Id;
Department_Id Employee_Eid
254 251
254 252
254 253
W powyższej tabeli pola deparment_id i Employ_id to klucze obce (pola referencyjne) z tabel działu i pracownika.
Przekaż następujące zapytanie w interfejsie MySQL, a wynik tabeli działów w formacie tabelarycznym zostanie wyświetlony w zapytaniu w następujący sposób:
Select * from department;
Id Name
254 Development
Przekaż następujące zapytanie w interfejsie MySQL, a wynik tabeli pracowników w formacie tabelarycznym zostanie wyświetlony w zapytaniu w następujący sposób:
Select * from employee;
Eid Deg Ename Salary
251 Technical Writer Satish 45000
252 Technical Writer Krishna 45000
253 Technical Writer Masthanvali 50000
@OneToOne Relacja
W relacji jeden do jednego jeden element może należeć tylko do jednego innego elementu. Oznacza to, że każdy wiersz jednej jednostki odnosi się do jednego i tylko jednego wiersza innej jednostki.
Rozważmy powyższy przykład. Employee i Departmentw odwrotnym jednokierunkowym sposobie relacja jest relacją jeden do jednego. Oznacza to, że każdy pracownik należy tylko do jednego działu. Utwórz projekt JPA w środowisku Eclipse IDE o nazwieJPA_Eclipselink_OTO. Wszystkie moduły tego projektu przedstawiono w następujący sposób:
Tworzenie jednostek
Postępuj zgodnie z podanym powyżej schematem tworzenia jednostek. Utwórz pakiet o nazwie‘com.tutorialspoin.eclipselink.entity’ pod ‘src’pakiet. Utwórz klasę o nazwieDepartment.javapod danym pakietem. Jednostka klasy Dział jest pokazana w następujący sposób:
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;
}
}
Utwórz drugą jednostkę w tej relacji - klasa jednostki pracownika o nazwie Employee.java pod ‘com.tutorialspoint.eclipselink.entity’pakiet. Klasa jednostki pracownika jest przedstawiona w następujący sposób:
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 zostanie utworzony przez eclipse IDE podczas tworzenia projektu JPA. Szczegóły konfiguracji są specyfikacjami użytkownika. Plik persistence.xml jest wyświetlany w następujący sposób:
<?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>
Klasy usług
Ten moduł zawiera klasy usług, które implementują część relacyjną przy użyciu inicjalizacji atrybutu. Utwórz pakiet pod‘src’ pakiet o nazwie ‘com.tutorialspoint.eclipselink.service’. Klasa DAO o nazwieOneToOne.javajest tworzony w ramach danego pakietu. Klasa DAO jest przedstawiona w następujący sposób:
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();
}
}
Po skompilowaniu i wykonaniu powyższego programu otrzymasz powiadomienia w panelu konsoli Eclipse IDE. Aby uzyskać dane wyjściowe, sprawdź Środowisko robocze MySQL w następujący sposób. W powyższym przykładzie tworzone są dwie tabele.
Przekaż następujące zapytanie w interfejsie MySQL i wynik department tabela w formacie tabelarycznym jest wyświetlana w zapytaniu w następujący sposób:
Select * from department
Id Name
301 Development
Przekaż następujące zapytanie w interfejsie MySQL i wynik employee tabela w formacie tabelarycznym jest wyświetlana w zapytaniu w następujący sposób:
Select * from employee
Eid Deg Ename Salary Department_id
302 Technical Writer Satish 45000 301
@ManyToMany Relation
Relacja wiele do wielu występuje, gdy jeden lub więcej wierszy z jednej encji jest skojarzonych z więcej niż jednym wierszem w innej encji.
Rozważmy przykład relacji między jednostkami Klasa i Nauczyciel. W sposób dwukierunkowy zarówno Klasa, jak i Nauczyciel mają relację wiele do jednego. Oznacza to, że każdy rekord klasy jest powiązany z zestawem nauczycieli (identyfikatory nauczycieli), które powinny być kluczami głównymi w tabeli Nauczyciela i przechowywane w tabeli Teacher_Class i odwrotnie. Tutaj tabela Teachers_Class zawiera oba pola kluczy obcych. Utwórz projekt JPA w środowisku Eclipse IDE o nazwieJPA_Eclipselink_MTM. Wszystkie moduły tego projektu przedstawiono w następujący sposób:
Tworzenie jednostek
Postępuj zgodnie z podanym powyżej schematem tworzenia jednostek. Utwórz pakiet o nazwie‘com.tutorialspoin.eclipselink.entity’ pod ‘src’pakiet. Utwórz klasę o nazwieClas.javapod danym pakietem. Jednostka klasy Dział jest pokazana w następujący sposób:
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;
}
}
Utwórz drugą jednostkę w tej relacji - klasa jednostki pracownika o nazwie Teacher.java pod ‘com.tutorialspoint.eclipselink.entity’pakiet. Klasa jednostki pracownika jest przedstawiona w następujący sposób:
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 zostanie utworzony przez eclipse IDE podczas tworzenia projektu JPA. Szczegóły konfiguracji są specyfikacjami użytkownika. Plik persistence.xml jest wyświetlany w następujący sposób:
<?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>
Klasy usług
Ten moduł zawiera klasy usług, które implementują część relacyjną przy użyciu inicjalizacji atrybutu. Utwórz pakiet pod‘src’ pakiet o nazwie ‘com.tutorialspoint.eclipselink.service’. Klasa DAO o nazwieManyToMany.javajest tworzony w ramach danego pakietu. Klasa DAO jest przedstawiona w następujący sposób:
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( );
}
}
Po skompilowaniu i wykonaniu powyższego programu otrzymasz powiadomienia w panelu konsoli Eclipse IDE. Aby uzyskać dane wyjściowe, sprawdź Środowisko robocze MySQL w następujący sposób. W tym przykładowym projekcie tworzone są trzy tabele.
Przekaż następujące zapytanie w interfejsie MySQL i wynik teacher_clas tabela w formacie tabelarycznym jest wyświetlana w zapytaniu w następujący sposób.
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
W powyższej tabeli teacher_tid to klucz obcy z tabeli nauczyciela, a classet_cid to klucz obcy z tabeli klasy. Dlatego różni nauczyciele są przydzielani do różnych klas.
Przekaż następujące zapytanie w interfejsie MySQL, a wynik tabeli nauczyciela w formacie tabelarycznym zostanie wyświetlony w zapytaniu w następujący sposób:
Select * from teacher;
Tid Subject Tname
354 Java Satish
355 Adv Java Krishna
356 DB2 Masthanvali
Przekaż następujące zapytanie w interfejsie MySQL i wynik clas tabela w formacie tabelarycznym jest wyświetlana w zapytaniu w następujący sposób:
Select * from clas;
cid Cname
351 1st
352 2nd
353 3rd