Эта глава проведет вас через отношения между сущностями. Как правило, отношения между таблицами в базе данных более эффективны. Здесь классы сущностей рассматриваются как реляционные таблицы (концепция JPA), поэтому отношения между классами сущностей таковы:
- @ManyToOne Relation
- @OneToMany Relation
- @OneToOne Relation
- @ManyToMany Relation
@ManyToOne Relation
Отношение «многие к одному» между объектами: когда на один объект (столбец или набор столбцов) ссылается другой объект (столбец или набор столбцов), которые содержат уникальные значения. В реляционных базах данных эти отношения применимы с использованием внешнего ключа / первичного ключа между таблицами.
Рассмотрим пример отношений между сотрудниками и подразделениями. В однонаправленном порядке, то есть от сотрудника к отделу, применяется отношение «многие к одному». Это означает, что каждая запись сотрудника содержит один идентификатор отдела, который должен быть первичным ключом в таблице Отдел. Здесь в таблице Employee идентификатор отдела — это внешний ключ.
Диаграмма объясняет отношение «многие к одному» следующим образом:
Создайте проект JPA в IDE затмения с именем JPA_Eclipselink_MTO . Все модули этого проекта показаны следующим образом:
Создание сущностей
Следуйте приведенной выше схеме для создания сущностей. Создайте пакет с именем ‘com.tutorialspoin.eclipselink.entity’ в пакете ‘src’ . Создайте класс с именем Department.java для данного пакета. Класс Отдел сущности показан следующим образом:
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; } }
Создайте в этом отношении второй объект — класс объектов Employee с именем Employee.java в пакете com.tutorialspoint.eclipselink.entity . Класс сущности Employee отображается следующим образом:
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
Файл Persistence.xml необходим для настройки базы данных и регистрации классов сущностей.
Persitence.xml будет создан IDE затмения при создании проекта JPA. Детали конфигурации являются пользовательскими спецификациями. Файл persistence.xml отображается следующим образом:
<?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>
Сервисные классы
Этот модуль содержит классы обслуживания, которые реализуют реляционную часть с использованием атрибута инициализации. Создайте пакет в пакете ‘src’ с именем ‘com.tutorialspoint.eclipselink.service’ . Класс DAO с именем ManyToOne.java создается под данным пакетом. Класс DAO показан следующим образом:
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(); } }
После компиляции и выполнения вышеуказанной программы вы получите уведомления на панели консоли Eclipse IDE. Для вывода проверьте MySQL Workbench. В этом примере созданы две таблицы.
Передайте следующий запрос в интерфейсе MySQL, и результат таблицы Department в табличном формате будет показан в запросе следующим образом:
Select * from department; Id Name 101 Development
Передайте следующий запрос в интерфейс MySQL, и результат таблицы Employee в табличном формате будет показан следующим образом:
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
В приведенной выше таблице Deparment_Id — это внешний ключ (поле ссылки) из таблицы Department.
@OneToMany Relation
В этом отношении каждая строка одного объекта ссылается на множество дочерних записей в другом объекте. Важно то, что у дочерних записей не может быть нескольких родителей. В отношении «один ко многим» между таблицей A и таблицей B каждая строка в таблице A связана с 0, 1 или многими строками в таблице B.
Давайте рассмотрим приведенный выше пример. Если Сотрудник и Департамент работают в обратном однонаправленном порядке, отношение является отношением «многие к одному». Создайте проект JPA в IDE затмения с именем JPA_Eclipselink_OTM . Все модули этого проекта показаны следующим образом:
Создание сущностей
Следуйте приведенной выше схеме для создания сущностей. Создайте пакет с именем ‘com.tutorialspoin.eclipselink.entity’ в пакете ‘src’ . Создайте класс с именем Department.java для данного пакета. Класс Отдел сущности показан следующим образом:
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; } }
Создайте в этом отношении вторую сущность — класс сущности Employee с именем Employee.java в пакете com.tutorialspoint.eclipselink.entity . Класс сущности Employee отображается следующим образом:
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 будет создан IDE eclipse при создании проекта JPA. Детали конфигурации являются пользовательскими спецификациями. Файл persistence.xml отображается следующим образом:
<?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>
Сервисные классы
Этот модуль содержит классы обслуживания, которые реализуют реляционную часть с использованием атрибута инициализации. Создайте пакет в пакете ‘src’ с именем ‘com.tutorialspoint.eclipselink.service’ . Класс DAO с именем OneToMany.java создается под данным пакетом. Класс DAO показан следующим образом:
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();
}
}
После компиляции и выполнения вышеуказанной программы вы получите уведомления на панели консоли Eclipse IDE. Для вывода проверьте MySQL Workbench следующим образом. В этом проекте созданы три таблицы.
Передайте следующий запрос в интерфейсе MySQL, и результат таблицы Department_employee в табличном формате будет показан в запросе следующим образом:
Select * from department_Id; Department_Id Employee_Eid 254 251 254 252 254 253
В приведенной выше таблице поля deparment_id и employee_id представляют собой внешние ключи (справочные поля) из таблиц отделов и сотрудников.
Передайте следующий запрос в интерфейсе MySQL, и результат таблицы отделов в табличном формате будет показан следующим образом:
Select * from department; Id Name 254 Development
Передайте следующий запрос в интерфейсе MySQL, и результат таблицы сотрудника в табличном формате будет показан следующим образом:
Select * from employee; Eid Deg Ename Salary 251 Technical Writer Satish 45000 252 Technical Writer Krishna 45000 253 Technical Writer Masthanvali 50000
@OneToOne Relation
В отношениях один-к-одному один элемент может принадлежать только одному другому элементу. Это означает, что каждая строка одного объекта относится к одной и только одной строке другого объекта.
Давайте рассмотрим приведенный выше пример. Сотрудник и отдел в обратной однонаправленной манере, отношение один-к-одному. Это означает, что каждый сотрудник принадлежит только одному отделу. Создайте проект JPA в IDE затмения с именем JPA_Eclipselink_OTO . Все модули этого проекта показаны следующим образом:
Создание сущностей
Следуйте приведенной выше схеме для создания сущностей. Создайте пакет с именем ‘com.tutorialspoin.eclipselink.entity’ в пакете ‘src’ . Создайте класс с именем Department.java для данного пакета. Класс Отдел сущности показан следующим образом:
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;
}
}
Создайте в этом отношении вторую сущность — класс сущности Employee с именем Employee.java в пакете com.tutorialspoint.eclipselink.entity . Класс сущности Employee отображается следующим образом:
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 будет создан IDE eclipse при создании проекта JPA. Детали конфигурации являются пользовательскими спецификациями. Файл persistence.xml отображается следующим образом:
<?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>
Сервисные классы
Этот модуль содержит классы обслуживания, которые реализуют реляционную часть с использованием атрибута инициализации. Создайте пакет в пакете ‘src’ с именем ‘com.tutorialspoint.eclipselink.service’ . Класс DAO с именем OneToOne.java создается под данным пакетом. Класс DAO показан следующим образом:
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();
}
}
После компиляции и выполнения вышеуказанной программы вы получите уведомления на панели консоли Eclipse IDE. Для вывода проверьте MySQL Workbench следующим образом. В приведенном выше примере две таблицы созданы.
Передайте следующий запрос в интерфейсе MySQL, и результат таблицы отделов в табличном формате будет показан следующим образом:
Select * from department Id Name 301 Development
Передайте следующий запрос в интерфейсе MySQL, и результат таблицы сотрудника в табличном формате будет показан следующим образом:
Select * from employee Eid Deg Ename Salary Department_id 302 Technical Writer Satish 45000 301
@ManyToMany Relation
Отношение «многие ко многим» — это когда одна или несколько строк одного объекта связаны с несколькими строками другого объекта.
Давайте рассмотрим пример отношений между классом и сущностями Учителя. В двунаправленной манере и класс, и учитель имеют отношение «многие к одному». Это означает, что каждая запись класса указывается набором учителя (идентификаторы учителя), которые должны быть первичными ключами в таблице учителя и храниться в таблице Teacher_Class и наоборот. Здесь таблица Teachers_Class содержит оба поля внешнего ключа. Создайте проект JPA в IDE затмения с именем JPA_Eclipselink_MTM . Все модули этого проекта показаны следующим образом:
Создание сущностей
Следуйте приведенной выше схеме для создания сущностей. Создайте пакет с именем ‘com.tutorialspoin.eclipselink.entity’ в пакете ‘src’ . Создайте класс с именем Clas.java под данным пакетом. Класс Отдел сущности показан следующим образом:
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;
}
}
Создайте в этом отношении вторую сущность — класс сущности -работодателя с именем Teacher.java в пакете com.tutorialspoint.eclipselink.entity . Класс сущности Employee отображается следующим образом:
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 будет создан IDE eclipse при создании проекта JPA. Детали конфигурации являются пользовательскими спецификациями. Файл persistence.xml отображается следующим образом:
<?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>
Сервисные классы
Этот модуль содержит классы обслуживания, которые реализуют реляционную часть с использованием атрибута инициализации. Создайте пакет в пакете ‘src’ с именем ‘com.tutorialspoint.eclipselink.service’ . Класс DAO с именем ManyToMany.java создается под данным пакетом. Класс DAO показан следующим образом:
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( );
}
}
После компиляции и выполнения вышеуказанной программы вы получите уведомления на панели консоли Eclipse IDE. Для вывода проверьте MySQL Workbench следующим образом. В этом примере проекта созданы три таблицы.
Передайте следующий запрос в интерфейс MySQL, и результат таблицы teacher_clas в табличном формате будет показан в запросе следующим образом.
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
В приведенной выше таблице teacher_tid является внешним ключом из таблицы учителя, а classet_cid является внешним ключом из таблицы классов. Поэтому разные учителя отводятся в разные классы.
Передайте следующий запрос в интерфейсе MySQL, и результат таблицы учителя в табличном формате будет показан следующим образом:
Select * from teacher; Tid Subject Tname 354 Java Satish 355 Adv Java Krishna 356 DB2 Masthanvali
Передайте следующий запрос в интерфейсе MySQL, и результат таблицы clas в табличном формате будет показан следующим образом:

