JPA - Отношения реальности


Advertisements

Эта глава принимает вас через отношения между реальностями. Вообще отношения более эффективны между таблицами в базе данных. Здесь типы реальности обработаны как реляционные таблицы (принципиальная схема JPA), поэтому отношения между типами реальности следующим образом:

  • @ManyToOne Relation
  • @OneToMany Relation
  • @OneToOne Relation
  • @ManyToMany Relation

@ManyToOne Relation

Много-К-Одн отношению между реальностями существует где одна реальность (колонка или комплект колонок) снабжена ссылками при другая реальность (колонка или комплект колонок) содержа уникально значения. В реляционных базах данных, эти отношения прикладной путем использование чужого ключа/основного ключа между таблицами.

Препятствуйте нам рассматривать пример отношения между реальностями работника и отдела. В однонаправленном образе, т.е., от работника к отделу, Много-К-Одн отношению применим. То значит что каждый показатель работника содержит одно удостоверение личности отдела, которое должно быть основным ключом в таблице отдела. Здесь в таблице работника, удостоверение личности отдела чужой ключ.

Следующая диаграмма показывает Много-К-Одн отношению между 2 таблицами.

@ManyToOne Relation

Создайте проект JPA в ЯЗЕ затмения, названном JPA_Eclipselink_MTO . Все модули этого проекта обсуждены ниже.

Предприятия Создания

Следуйте вышеупомянутой данной диаграмме для создания предприятий. Создайте пакет, названный ‘com.tutorialspoin.eclipselink.entity’ под ‘src’ пакет. Создайте класс, названный Department.java под данным пакетом. Предприятие Отдела класса показывают следующим образом:

package com.howcodex.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.java работника названное типом под пакет com.howcodex.eclipselink.entity'. Тип реальности работника показан что следующим образом:

package com.howcodex.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.howcodex.eclipselink.entity.Employee</class>
	<class>com.howcodex.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>

Обслуживайте типы

Этот модуль содержит типы обслуживания, который снабжает реляционную часть используя начинание атрибута. Создайте пакет под ` названным пакетом com.howcodex.eclipselink.service' src `'. Названный тип DAO ManyToOne.java создан под, котор дали пакетом. Тип DAO показан что следующим образом:

package com.howcodexeclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.howcodex.eclipselink.entity.Department;
import com.howcodex.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();
	}
}

После составлять и исполнять вышеуказанную программу, вы получите извещения на панели пульта затмения IDE. Для выхода, проверите workbench MySQL. В этом примере, 2 таблицы созданы.

Пройдите следующий вопрос в интерфейсе MySQL и будет показан результат таблицы отдела следующим образом:

Select * from department
Удостоверение личности Имя
101 Развитие

Пройдите следующий вопрос в интерфейсе MySQL и результат таблицы работника будет показан следующим образом.

Select * from employee
Eid Deg Ename Зарплата Department_Id
102 Технический сочинитель Satish 45000 101
103 Технический сочинитель Krishna 45000 101
104 Технический сочинитель Masthanwali 50000 101

В вышеуказанной таблице Deparment_Id чужой ключ (опорное поле) от таблицы отдела.

@OneToMany Relation

В этом отношении, каждый рядок одной реальности снабжен ссылками к много показателей ребенка в другой реальности. Важная вещь что показатели ребенка не могут иметь множественных родителей. В одн-к-много отношение между таблицей a и таблицей b, каждый рядок в таблице a можно соединить к одному или множественным рядкам в B. таблицы.

Препятствуйте нам рассматривать вышеуказанный пример. Предположите что таблицы работник и отдел в вышеуказанном примере подключено в обратном однонаправленном образе, тогда отношение будет Одн-К-Много отношение. Создайте проект JPA в названном затмении IDE JPA_Eclipselink_OTM. Все модули этого проекта обсужены ниже.

Создавать реальности

Следуйте вышеупомянутой данной диаграмме для создания предприятий. Создайте пакет, названный ‘com.tutorialspoin.eclipselink.entity’ под ‘src’ пакет. Создайте класс, названный Department.java под данным пакетом. Предприятие Отдела класса показывают следующим образом:

package com.howcodex.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.java под ‘com.howcodex.eclipselink.entity’ пакет. Класс предприятия Сотрудника показывают следующим образом:

package com.howcodex.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 следующим образом:

<?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.howcodex.eclipselink.entity.Employee</class>
	<class>com.howcodex.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>

Обслуживайте типы

Этот модуль содержит типы обслуживания, который снабжает реляционную часть используя начинание атрибута. Создайте пакет под ` названным пакетом com.howcodex.eclipselink.service' src `'. Названный тип DAO OneToMany.java создан под, котор дали пакетом. Тип DAO показан что следующим образом:

package com.howcodexeclipselink.service;

import java.util.List;
import java.util.ArrayList;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.howcodex.eclipselink.entity.Department;
import com.howcodex.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();
	}
}

После составления и исполнения вышеуказанной программы вы получите извещения в панели пульта затмения IDE. Для workbench MySQL проверки выхода следующим образом.

В таблицах этого проекта 3 создайтесь. Пройдите следующий вопрос в интерфейсе 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;
Удостоверение личности Имя
254 Развитие

Пройдите следующий вопрос в интерфейсе MySQL и будет показан результат таблицы работника следующим образом:

Select * from employee;
Eid Градус Ename Зарплата
251 Технический писатель Сатиш 45000
252 Технический писатель Кришна 45000
253 Технический писатель Masthanwali 50000

@OneToOne Relation

В Непосредственных отношениях один пункт может быть связан только с одним другим пунктом. Это означает, что каждый ряд одного предприятия отнесен в один и только один ряд другого предприятия.

Давайте рассмотрим вышеупомянутый пример. Сотрудник и Отдел обратным однонаправленным способом, отношение - Непосредственное отношение. Это означает, что каждый сотрудник принадлежит только одному отделу. Создайте проект JPA в ЯЗЕ затмения, названном JPA_Eclipselink_OTO . Все модули этого проекта обсуждены ниже.

Предприятия Создания

Следуйте вышеупомянутой данной диаграмме для создания предприятий. Создайте пакет, названный ‘com.tutorialspoin.eclipselink.entity’ под ‘src’ пакет. Создайте класс, названный Department.java под данным пакетом. Предприятие Отдела класса показывают следующим образом:

package com.howcodex.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.java под ‘com.howcodex.eclipselink.entity’ пакетом. Класс предприятия Сотрудника показывают следующим образом:

package com.howcodex.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 следующим образом:

<?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.howcodex.eclipselink.entity.Employee</class>
	<class>com.howcodex.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.howcodex.eclipselink.service’. Класс ДАО по имени OneToOne.java создан под данным пакетом. Класс ДАО показывают следующим образом:

package com.howcodexeclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.howcodex.eclipselink.entity.Department;
import com.howcodex.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();
	}
}

После компиляции и выполнения вышеупомянутой программы Вы получите уведомления в группе пульта ЯЗЯ Затмения. Для продукции проверьте рабочее место MySQL следующим образом.

В вышеупомянутом примере составлены две таблицы. Передайте следующий вопрос в интерфейсе MySQL, и результат стола отдела будет показан следующим образом:

Select * from department
ID Name
301 Development

Передайте следующий вопрос в интерфейсе MySQL, и результат списка сотрудников будет показан следующим образом:

Select * from employee
EidГрадус EnameЗарплата Department_id
302 Технический писатель Сатиш 45000 301

@ManyToMany Relation

Отношения Many-Many - то, где один или несколько рядов от одного предприятия связаны больше чем с одним рядом в другом предприятии.

Давайте рассмотрим пример отношения между двумя предприятиями: Класс и Учитель. Двунаправленным способом у и Класса и Учителя есть отношение Many-One. Это означает, что каждый отчет Класса отнесен компанией Учителей (иды учителя), который должен быть первичными ключами в столе Учителя и сохраненный в столе Teacher_Class и наоборот. Здесь, таблица Teachers_Class содержит обоих области внешнего ключа. Создайте проект JPA в ЯЗЕ затмения под названием JPA_Eclipselink_MTM. Все модули этого проекта обсуждены ниже.

многие ко многим отношении

Предприятия Создания

Создайте предприятия следующим схема, показанная в диаграмме выше. Создайте пакет, названный ‘com.tutorialspoin.eclipselink.entity’ под ‘src’ пакетом. Создайте класс по имени Clas.java под данным пакетом. Предприятие Отдела класса показывают следующим образом:

package com.howcodex.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.howcodex.eclipselink.entity’ пакетом. Класс предприятия Сотрудника показывают следующим образом:

package com.howcodex.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 следующим образом:

<?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.howcodex.eclipselink.entity.Employee</class>
	<class>com.howcodex.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.howcodex.eclipselink.service’. Класс ДАО по имени ManyToMany.java создан под данным пакетом. Класс ДАО показывают следующим образом:

package com.howcodex.eclipselink.service;

import java.util.HashSet;
import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.howcodex.eclipselink.entity.Clas;
import com.howcodex.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 classSet1 = new HashSet();
		classSet1.add(clas1);
		classSet1.add(clas2);
		classSet1.add(clas3);
		
		//Create Clas Set2
		Set classSet2 = new HashSet();
		classSet2.add(clas3);
		classSet2.add(clas1);
		classSet2.add(clas2);
				
		//Create Clas Set3
		Set 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( );
	}
}

В этом проекте в качестве примера составлены три таблицы. Передайте следующий вопрос в интерфейсе 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, и результат стола класса будет показан следующим образом:

Select * from clas
Cid Cname
351 1st
352 2nd
353 3rd
Advertisements