JPA - Varlık İlişkileri

Bu bölüm, Varlıklar arasındaki ilişkiler konusunda sizi yönlendirir. Genellikle, veritabanındaki tablolar arasındaki ilişkiler daha etkilidir. Burada varlık sınıfları ilişkisel tablolar (JPA kavramı) olarak ele alınır, bu nedenle Varlık sınıfları arasındaki ilişkiler aşağıdaki gibidir:

  • @ManyToOne İlişkisi
  • @OneToMany İlişki
  • @OneToOne İlişkisi
  • @ManyToMany İlişki

@ManyToOne İlişkisi

Varlıklar arasında Çoktan Bire ilişkisi: Bir varlığa (sütun veya sütun kümesi), benzersiz değerler içeren başka bir varlık (sütun veya sütun kümesi) ile başvurulduğunda / başvurulduğunda. İlişkisel veritabanlarında bu ilişkiler, tablolar arasında yabancı anahtar / birincil anahtar kullanılarak uygulanabilir.

Çalışan ve Departman varlıkları arasındaki ilişkinin bir örneğini ele alalım. Tek yönlü olarak Çalışandan Departmana Çoktan Bire ilişkisi uygulanabilir. Bu, her çalışan kaydının, Departman tablosunda birincil anahtar olması gereken bir departman kimliği içerdiği anlamına gelir. Çalışan tablosunda, Departman kimliği yabancı Anahtar'dır.

Şema, Çoka Bir ilişkisini aşağıdaki gibi açıklamaktadır:

Eclipse IDE adlı bir JPA projesi oluşturun JPA_Eclipselink_MTO. Bu projenin tüm modülleri aşağıdaki şekilde gösterilmektedir:

Varlıklar Oluşturma

Varlıklar oluşturmak için yukarıda verilen diyagramı izleyin. Adlı bir paket oluşturun‘com.tutorialspoin.eclipselink.entity’ altında ‘src’paketi. Adlı bir sınıf oluşturunDepartment.javaverilen paket altında. Sınıf Departmanı varlığı aşağıdaki gibi gösterilir:

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;
   }
}

Bu ilişkideki ikinci varlığı oluşturun - adlı Çalışan varlık sınıfı Employee.java altında ‘com.tutorialspoint.eclipselink.entity’paketi. Çalışan varlık sınıfı aşağıdaki gibi gösterilir:

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 dosyası, veritabanını ve varlık sınıflarının kaydını yapılandırmak için gereklidir.

Persitence.xml, bir JPA Projesi oluşturulurken tutulma IDE'si tarafından oluşturulacaktır. Yapılandırma ayrıntıları kullanıcı özellikleridir. Kalıcılık.xml dosyası aşağıdaki gibi gösterilir:

<?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>

Hizmet Sınıfları

Bu modül, öznitelik başlatmayı kullanarak ilişkisel bölümü uygulayan hizmet sınıflarını içerir. Altında bir paket oluşturun‘src’ paket adı ‘com.tutorialspoint.eclipselink.service’. DAO sınıfıManyToOne.javaverilen paket altında oluşturulur. DAO sınıfı aşağıdaki gibi gösterilir:

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();
   }
}

Yukarıdaki programı derledikten ve çalıştırdıktan sonra Eclipse IDE'nin konsol panelinde bildirimler alacaksınız. Çıktı için MySQL çalışma tezgahını kontrol edin. Bu örnekte iki tablo oluşturulmuştur.

Aşağıdaki sorguyu MySQL arayüzünde ve sonucunu iletin Department tablo biçiminde tablo, sorguda aşağıdaki gibi gösterilir:

Select * from department;

Id	Name
101	Development

Aşağıdaki sorguyu MySQL arayüzünde ve sonucunu iletin Employee tablo biçiminde tablo, sorguda aşağıdaki gibi gösterilir:

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

Yukarıdaki tabloda Deparment_Id, Departman tablosundaki yabancı anahtardır (referans alanı).

@OneToMany İlişki

Bu ilişkide, bir varlığın her satırı, diğer varlıktaki birçok alt kayda başvurulur. Önemli olan, çocuk kayıtlarının birden fazla ebeveyni olamayacağıdır. Tablo A ve Tablo B arasındaki bire çok ilişkisinde, Tablo A'daki her satır, Tablo B'deki 0, 1 veya birçok satıra bağlıdır.

Yukarıdaki örneği ele alalım. EğerEmployee ve Departmentters tek yönlü bir ilişkidir, ilişki Çoktan Bire ilişkisidir. Eclipse IDE adlı bir JPA projesi oluşturunJPA_Eclipselink_OTM. Bu projenin tüm modülleri aşağıdaki şekilde gösterilmektedir:

Varlıklar Oluşturma

Varlıklar oluşturmak için yukarıda verilen diyagramı izleyin. Adlı bir paket oluşturun‘com.tutorialspoin.eclipselink.entity’ altında ‘src’paketi. Adlı bir sınıf oluşturunDepartment.javaverilen paket altında. Sınıf Departmanı varlığı aşağıdaki gibi gösterilir:

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;
   }
}

Bu ilişkideki -Employee varlık sınıfındaki ikinci varlığı oluşturun. Employee.java altında ‘com.tutorialspoint.eclipselink.entity’paketi. Çalışan varlık sınıfı aşağıdaki gibi gösterilir:

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, bir JPA Projesi oluşturulurken tutulma IDE'si tarafından oluşturulacaktır. Yapılandırma ayrıntıları kullanıcı özellikleridir. Kalıcılık.xml dosyası aşağıdaki gibi gösterilir:

<?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>

Hizmet Sınıfları

Bu modül, öznitelik başlatmayı kullanarak ilişkisel bölümü uygulayan hizmet sınıflarını içerir. Altında bir paket oluşturun‘src’ paket adı ‘com.tutorialspoint.eclipselink.service’. DAO sınıfıOneToMany.javaverilen paket altında oluşturulur. DAO sınıfı aşağıdaki gibi gösterilir:

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();
   }
}

Yukarıdaki programı derledikten ve çalıştırdıktan sonra Eclipse IDE'nin konsol panelinde bildirimler alacaksınız. Çıktı için MySQL çalışma tezgahını aşağıdaki gibi kontrol edin. Bu projede üç tablo oluşturulmuştur.

Aşağıdaki sorguyu MySQL arayüzünde ve sonucunu iletin department_employee tablo biçiminde tablo, sorguda aşağıdaki gibi gösterilir:

Select * from department_Id;

Department_Id	Employee_Eid
254	        251
254	        252
254	        253

Yukarıdaki tabloda, deparment_id ve Emparment_id alanları, departman ve çalışan tablolarındaki yabancı anahtarlardır (referans alanları).

Aşağıdaki sorguyu MySQL arayüzünde geçirin ve bölüm tablosunun sonucu sorguda aşağıdaki gibi tablo formatında gösterilir:

Select * from department;

Id	Name
254	Development

Aşağıdaki sorguyu MySQL arayüzünde geçirin ve çalışan tablosunun sonucu, sorguda aşağıdaki gibi tablo biçiminde gösterilir:

Select * from employee;

Eid	Deg	                Ename	       Salary
251	Technical Writer	Satish	       45000
252	Technical Writer	Krishna	       45000
253	Technical Writer	Masthanvali    50000

@OneToOne İlişkisi

Bire Bir ilişkide, bir öğe yalnızca bir diğer öğeye ait olabilir. Bu, bir varlığın her satırının başka bir varlığın bir ve yalnızca bir satırına başvurulduğu anlamına gelir.

Yukarıdaki örneği ele alalım. Employee ve Departmentters tek yönlü bir şekilde, ilişki Bire Bir ilişkidir. Her çalışanın yalnızca bir departmana ait olduğu anlamına gelir. Eclipse IDE adlı bir JPA projesi oluşturunJPA_Eclipselink_OTO. Bu projenin tüm modülleri aşağıdaki şekilde gösterilmektedir:

Varlıklar Oluşturma

Varlıklar oluşturmak için yukarıda verilen diyagramı izleyin. Adlı bir paket oluşturun‘com.tutorialspoin.eclipselink.entity’ altında ‘src’paketi. Adlı bir sınıf oluşturunDepartment.javaverilen paket altında. Sınıf Departmanı varlığı aşağıdaki gibi gösterilir:

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;
   }
}

Bu ilişkideki -Employee varlık sınıfındaki ikinci varlığı oluşturun. Employee.java altında ‘com.tutorialspoint.eclipselink.entity’paketi. Çalışan varlık sınıfı aşağıdaki gibi gösterilir:

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, bir JPA Projesi oluşturulurken tutulma IDE'si tarafından oluşturulacaktır. Yapılandırma ayrıntıları kullanıcı özellikleridir. Kalıcılık.xml dosyası aşağıdaki gibi gösterilir:

<?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>

Hizmet Sınıfları

Bu modül, öznitelik başlatmayı kullanarak ilişkisel bölümü uygulayan hizmet sınıflarını içerir. Altında bir paket oluşturun‘src’ paket adı ‘com.tutorialspoint.eclipselink.service’. DAO sınıfıOneToOne.javaverilen paket altında oluşturulur. DAO sınıfı aşağıdaki gibi gösterilir:

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();
   }
}

Yukarıdaki programı derledikten ve çalıştırdıktan sonra Eclipse IDE'nin konsol panelinde bildirimler alacaksınız. Çıktı için MySQL çalışma tezgahını aşağıdaki gibi kontrol edin. Yukarıdaki örnekte iki tablo oluşturulmuştur.

Aşağıdaki sorguyu MySQL arayüzünde ve sonucunu iletin department tablo biçiminde tablo, sorguda aşağıdaki gibi gösterilir:

Select * from department

Id	Name
301	Development

Aşağıdaki sorguyu MySQL arayüzünde ve sonucunu iletin employee tablo biçiminde tablo, sorguda aşağıdaki gibi gösterilir:

Select * from employee

Eid	Deg	                Ename	Salary	Department_id
302	Technical Writer	Satish	45000	301

@ManyToMany İlişki

Çoktan-Çoğa ilişkisi, bir varlıktaki bir veya daha fazla satırın diğer varlıktaki birden fazla satırla ilişkilendirildiği yerdir.

Sınıf ve Öğretmen varlıkları arasındaki ilişkinin bir örneğini ele alalım. Çift yönlü olarak, hem Sınıf hem de Öğretmenin Çoka Bir ilişkisi vardır. Bu, Sınıfın her bir kaydının, Öğretmen tablosunda birincil anahtarlar olması gereken ve Öğretmen_Sınıf tablosunda saklanması gereken Öğretmen seti (öğretmen kimlikleri) tarafından referans verildiği anlamına gelir. Burada, Teachers_Class tablosu her iki yabancı Anahtar alanını içerir. Eclipse IDE adlı bir JPA projesi oluşturunJPA_Eclipselink_MTM. Bu projenin tüm modülleri aşağıdaki şekilde gösterilmektedir:

Varlıklar Oluşturma

Varlıklar oluşturmak için yukarıda verilen diyagramı izleyin. Adlı bir paket oluşturun‘com.tutorialspoin.eclipselink.entity’ altında ‘src’paketi. Adlı bir sınıf oluşturunClas.javaverilen paket altında. Sınıf Departmanı varlığı aşağıdaki gibi gösterilir:

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;
   }	  
}

Bu ilişkideki -Employee varlık sınıfındaki ikinci varlığı oluşturun. Teacher.java altında ‘com.tutorialspoint.eclipselink.entity’paketi. Çalışan varlık sınıfı aşağıdaki gibi gösterilir:

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, bir JPA Projesi oluştururken tutulma IDE'si tarafından oluşturulacaktır. Yapılandırma ayrıntıları kullanıcı özellikleridir. Kalıcılık.xml dosyası aşağıdaki gibi gösterilir:

<?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>

Hizmet Sınıfları

Bu modül, öznitelik başlatmayı kullanarak ilişkisel bölümü uygulayan hizmet sınıflarını içerir. Altında bir paket oluşturun‘src’ paket adı ‘com.tutorialspoint.eclipselink.service’. DAO sınıfıManyToMany.javaverilen paket altında oluşturulur. DAO sınıfı aşağıdaki gibi gösterilir:

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( );
   }
}

Yukarıdaki programı derledikten ve çalıştırdıktan sonra Eclipse IDE'nin konsol panelinde bildirimler alacaksınız. Çıktı için MySQL çalışma tezgahını aşağıdaki gibi kontrol edin. Bu örnek projede, üç tablo oluşturulmuştur.

Aşağıdaki sorguyu MySQL arayüzünde ve sonucunu iletin teacher_clas tablo biçiminde tablo, sorguda aşağıdaki gibi gösterilir.

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

Yukarıdaki tabloda, teacher_tid, öğretmen tablosundaki yabancı anahtardır ve classet_cid, sınıf tablosundaki yabancı anahtardır. Bu nedenle, farklı öğretmenler farklı sınıflara ayrılmıştır.

Aşağıdaki sorguyu MySQL arayüzünde geçirin ve öğretmen tablosunun sonucu sorguda aşağıdaki gibi tablo biçiminde gösterilir:

Select * from teacher;

Tid	Subject	    Tname
354	Java	    Satish
355	Adv Java    Krishna
356	DB2         Masthanvali

Aşağıdaki sorguyu MySQL arayüzünde ve sonucunu iletin clas tablo biçiminde tablo, sorguda aşağıdaki gibi gösterilir:

Select * from clas;

cid	Cname
351	1st
352	2nd
353	3rd