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