JPA - Relacionamentos de Entidade


Advertisements

Este capítulo toma-o com os relacionamentos entre entidades. Geralmente as relações são mais eficazes entre tabelas no base de dados. As classes da entidade são tratadas aqui como as tabelas relacionais (conceito de JPA), consequentemente os relacionamentos entre classes da entidade são como segue:

  • @Muitos a uma relação
  • @Um aos muitos relação
  • @Uma a uma relações
  • @ManyTo muito relação

@Muitos a uma relação

Muitos a - uma relação entre entidades existe onde uma entidade (coluna ou grupo de colunas) é provida com uma outra entidade (coluna ou grupo de colunas) que contém valores originais. Em bases de dados relacionais, estas relações são aplicadas usando a chave estrangeira/chave preliminar entre as tabelas.

Deixe-nos considerar um exemplo de uma relação entre entidades do empregado e do departamento. Na maneira unidirecional, isto é, do empregado ao departamento, muitos - a - uma relação são aplicáveis. Isso significa que cada registro do empregado contém uma identificação do departamento, que deve ser uma chave preliminar na tabela do departamento. Aqui na tabela do empregado, a identificação do departamento é a chave estrangeira.

O seguinte diagrama mostra Muito--Um à relação entre as duas tabelas.

Muitos para um Relação

Crie um projeto de JPA no eclipse IDE nomeado JPA_Eclipselink_MTO. Todos os módulos deste projeto são discutidos abaixo.

Criando entidades

Siga o diagrama acima dado para criar entidades. Crie um pacote nomeado ‘com.tutorialspoin.eclipselink.entity’ sob ‘src’ pacote. Crie uma classe nomeada Department.java sob o pacote dado. A entidade do departamento da classe é mostrada como segues:

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

Crie a segunda entidade nesta relação - classe da entidade do empregado nomeada Empregado.java sob ‘com.tutorialspoint.eclipselink.entity’ pacote. A classe da entidade do empregado é mostrada como segue:

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

Persistência.xml

Persistência.xml o arquivo é exigido configurar o base de dados e o registro de classes da entidade.

Persitence.xml será criado pelo eclipse IDE ao criar um projeto de JPA. Os detalhes da configuração são especificações do usuário. O arquivo de persistence.xml é mostrado como segue:


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

Preste serviços de manutenção a classes

Este módulo contém as classes do serviço, que executa a parte relacional usando a iniciação do atributo. Crie um pacote abaixo ‘src’ pacote nomeado ‘com.tutorialspoint.eclipselink.service’. A classe de DAO nomeada Muitos a um.java é criado sob o pacote dado. A classe de DAO é mostrada como segue:

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

Após ter compilado e ter executado o programa acima, você obterá notificações no painel de console do eclipse IDE. Para a saída, verifique a bancada de MySQL. Neste exemplo, duas tabelas são criadas.

Passe a seguinte pergunta na relação de MySQL e o resultado da tabela de Departmento será indicado como segue:

Select * from department
ID Nome
101 Desenvolvimento

Passe a seguinte pergunta na relação de MySQL e no resultado de Empregado a tabela será indicada como segue.

Select * from employee
Eid Deg Ename Salário Departamento_Id
102 Escritor técnico Satish 45000 101
103 Escritor técnico Krishna 45000 101
104 Escritor técnico Masthanwali 50000 101

Na tabela acima Deparment_Id é a chave estrangeira (campo de referência) da tabela do departamento.

@Um aos muitos relação

Neste relacionamento, cada fileira de uma entidade é provida a muitos registros da criança na outra entidade. A coisa importante é que os registros da criança não podem ter pais múltiplos. Em uns um-à-muitos o relacionamento entre a tabela A e a tabela B, cada fileira na tabela A pode ser ligado a um ou às fileiras múltiplas na tabela B.

Deixe-nos considerar o exemplo acima. Supõe que tabelas do empregado e do departamento no exemplo acima estão conectados em uma maneira unidirecional reversa, a seguir a relação se torna Um-À-muita relação. Crie um projeto de JPA no eclipse IDE nomeado JPA_Eclipselink_OTM. Todos os módulos deste projeto são discutidos abaixo.

Criando entidades

Siga o diagrama acima dado para criar entidades. Crie um pacote nomeado ‘com.tutorialspoin.eclipselink.entity’ sob ‘src’ pacote. Crie uma classe nomeada Departmento.java sob o pacote dado. A entidade do departamento da classe é mostrada como segue:

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

Crie a segunda entidade nesta relação - classe da entidade do empregado, nomeada Employee.java sob o pacote do ` com.tutorialspoint.eclipselink.entity' do. A classe da entidade do empregado é mostrada como segue:

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

Persistência.xml

O arquivo de persistence.xml é como segue:

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

Preste serviços de manutenção a classes

Este módulo contém as classes do serviço, que executa a parte relacional usando a iniciação do atributo. Crie um pacote abaixo ‘src’ Crie um pacote abaixo ‘com.tutorialspoint.eclipselink.service’. A classe de DAO nomeada OneToMany.java é criado sob o pacote dado. A classe de DAO é mostrada como segue:

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

Após a compilação e a execução do programa acima você obterá notificações no painel de console do eclipse IDE. Para a bancada de MySQL da verificação da saída como segue.

Neste projeto três as tabelas são criadas. Passe a seguinte pergunta na relação de MySQL e o resultado da tabela do department_employee será indicado como segue:

Select * from department_Id;
Departmento_ID Empregado_Eid
254 251
254 252
254 253

Na tabela acima, deparmento_id e empregado_id são as chaves estrangeiras (campos de referência) do departamento e da tabela do empregados.

Passe a seguinte pergunta na relação de MySQL e o resultado da tabela do departamento será indicado em um formato tabular como segue.

Select * from department;
ID Nome
254 Desenvolvimento

Passe a seguinte pergunta na relação de MySQL e o resultado da tabela do empregado será indicado como segue:

Select * from employee;
Eid Deg Ename Salário
251 Escritor técnico Satish 45000
252 Escritor técnico Krishna 45000
253 Escritor técnico Masthanwali 50000

@Uma a uma relações

No relacionamento linear, um artigo pode ser ligado a somente outro um artigo. Significa que cada fileira de uma entidade está referida uma e somente uma fileiras de uma outra entidade.

Deixe-nos considerar o exemplo acima. Empregado e Departmento em uma maneira unidirecional reversa, a relação é relação linear. Significa que cada empregado pertence a somente um departamento. Crie um projeto de JPA no eclipse IDE nomeado JPA_Eclipselink_OTO. Todos os módulos deste projeto são discutidos abaixo.

Criando entidades

Siga o diagrama acima dado para criar entidades. Crie um pacote nomeado ‘com.tutorialspoin.eclipselink.entity’ sob ‘src’ pacote. Crie uma classe nomeada Departmento.java sob o pacote dado. A entidade do departamento da classe é mostrada como segue:

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

Crie a segunda entidade nesta relação - classe da entidade do empregado, nomeada Empregado.java sob ‘com.tutorialspoint.eclipselink.entity’ pacote. A classe da entidade do empregado é mostrada como segue:

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

Persistência.xml

Persistência.xml arquivo como segue:

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

Preste serviços de manutenção a classes

Crie um pacote abaixo ‘src’ pacote nomeado ‘com.tutorialspoint.eclipselink.service’. A classe de DAO nomeada OneToOne.java é criado sob o pacote dado. A classe de DAO é mostrada como segue:

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

Após a compilação e a execução do programa acima você obterá notificações no painel de console do eclipse IDE. Para a saída, verifique a bancada de MySQL como segue.

No exemplo acima, duas tabelas são criadas. Passe a seguinte pergunta na relação de MySQL e o resultado da tabela do departamento será indicado como segue:

Select * from department
ID Nome
301 Desenvolvimento

Passe a seguinte pergunta na relação de MySQL e no resultado de empregado a tabela será indicada como segue:

Select * from employee
Eid Deg Ename Salário Departamento_id
302 Escritor técnico Satish 45000 301

@Muitos aos muitos relação

Muito-À-muito o relacionamento é o lugar onde umas ou várias fileiras de uma entidade são associadas com a mais de uma fileira na outra entidade.

Deixe-nos considerar um exemplo de uma relação entre duas entidades: Class e Professor. Na maneira bidirecional, a classe e o professor têm Muito--Um à relação. Isso significa que cada registro da classe está consultado pelo grupo do professor (ids do professor), que deve ser chaves preliminares na tabela do professor e armazenadas na tabela de Teacher_Class e vice-versa. Aqui, a tabela de Teachers_Class contém ambos os campos de chave estrangeira. Crie um projeto de JPA no eclipse IDE nomeado JPA_Eclipselink_MTM. Todos os módulos deste projeto são discutidos abaixo.

@Muitos para um Relação

Criando entidades

Crie entidades seguindo o esquema mostrado no diagrama acima. Crie um pacote nomeado ‘com.tutorialspoin.eclipselink.entity’ sob ‘src’ pacote. Crie uma classe nomeada Clas.java sob o pacote dado. A entidade do departamento da classe é mostrada como segue:

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

Crie a segunda entidade nesta relação - classe da entidade do empregado, nomeada Professor.java sob ‘com.tutorialspoint.eclipselink.entity’ pacote. A classe da entidade do empregado é mostrada como segue:

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

Persistência.xml

Persistência.xml arquivo como segue:

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

Preste serviços de manutenção a classes

Crie um pacote abaixo ‘src’ pacote nomeado ‘com.tutorialspoint.eclipselink.service’. A classe de DAO nomeada ManyToMany.java é criado sob o pacote dado. A classe de DAO é mostrada como segue:

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

Neste projeto do exemplo, três tabelas são criadas. Passe a seguinte pergunta na relação de MySQL e o resultado da tabela dos teacher_clas será indicado como segue:

Select * form teacher_clas
Professor_tid Classet_cid
354 351
355 351
356 351
354 352
355 352
356 352
354 353
355 353
356 353

Na tabela acima professor_tid é a chave estrangeira da tabela do professor, e classet_cid é a chave estrangeira da tabela da classe. Consequentemente os professores diferentes são distribuídos à classe diferente.

Passe a seguinte pergunta na relação de MySQL e o resultado da tabela do professor será indicado como segue:

Select * from teacher
Tid Assunto Tname
354 Java Satish
355 Adv Java Krishna
356 DB2 Masthanvali

Passe a seguinte pergunta na relação de MySQL e no resultado de clas a tabela será indicada como segue:

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