علاقات الكيانات جي بي آي JPA - Entity Relationships
علاقات الكيانات جي بي آي JPA - Entity Relationships
علاقات الكيانات جي بي آي JPA - Entity Relationships
عندما تتكلم عن علاقات الكيانات Entity Relationship
فنحن نتكلم عن لغة الإستعلام البنيوية للبيانات اس كيو ال SQL يمكنك القراءة عنها هنا من خلال الرابط التالي SQL
يأخذك هذا الفصل خلال العلاقات بين الكيانات. بشكل عام ، تكون العلاقات أكثر فاعلية بين الجداول في قاعدة البيانات. هنا يتم التعامل مع فئات الكيانات كجداول علائقية (مفهوم JPA) ، وبالتالي فإن العلاقات بين فئات الكيان هي كما يلي:
1 ManyToOne@ العلاقة
2 OneToMany@ العلاقة
3 OneToOne@ العلاقة
4 ManyToMany@ العلاقة
1 ManyToOne@ العلاقة
2 OneToMany@ العلاقة
3 OneToOne@ العلاقة
4 ManyToMany@ العلاقة
اولا ManyToOne@ العلاقة
علاقة أطراف بأطراف بين الكيانات: حيث يتم الرجوع / الرجوع إلى كيان واحد (عمود أو مجموعة من الأعمدة) مع كيان آخر (عمود أو مجموعة من الأعمدة) يحتوي على قيم فريدة. في قواعد البيانات العلائقية ، تكون هذه العلاقات قابلة للتطبيق باستخدام المفتاح الخارجي / المفتاح الأساسي بين الجداول.
دعونا نفكر في مثال العلاقة بين الموظف وكيانات الإدارة. بطريقة أحادية الاتجاه ، أي من الموظف إلى القسم ، فإن العلاقة بين أطراف متعددة تنطبق. هذا يعني أن كل سجل موظف يحتوي على معرف قسم واحد ، والذي يجب أن يكون مفتاح أساسي في جدول القسم. هنا في جدول الموظف ، معرف القسم هو مفتاح أجنبي.
يوضح الشكل علاقة أطراف متعددة كما يلي:
قم بإنشاء مشروع JPA في الكسوف IDE باسم JPA_Eclipselink_MTO. جميع وحدات هذا المشروع موضحة كالتالي:
إنشاء الكيانات create entities
اتبع الرسم البياني أعلاه لإنشاء الكيانات. قم بإنشاء حزمة باسم "com.ahmedalmahallawi.eclipselink.entity" ضمن حزمة "src". قم بإنشاء فصل باسم Department.java ضمن الحزمة المحددة. يظهر كيان قسم الفصل على النحو التالي:
package com.ahmedalmahallawi.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.ahmedalmahallawi.eclipselink.entity". تظهر فئة كيان الموظف على النحو التالي:
package com.ahmedalmahallawi.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 بواسطة eclipse IDE أثناء إنشاء مشروع JPA. تفاصيل التكوين هي مواصفات المستخدم. يتم عرض ملف persistence.xml كما يلي:
xml version="1.0" encoding = "UTF-8"?>
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">
name = "Eclipselink_JPA" transaction-type = "RESOURCE_LOCAL">
com.ahmedalmahallawi.eclipselink.entity.Employee
فئات الخدمة
تحتوي هذه الوحدة على فئات الخدمة ، والتي تنفذ الجزء العلائقي باستخدام تهيئة السمة. قم بإنشاء حزمة تحت حزمة 'src باسم' com.ahmedalmahallawi.eclipselink.service '. يتم إنشاء فئة DAO المسمى ManyToOne.java ضمن الحزمة المحددة. يتم عرض فئة DAO كالتالي:
package com.ahmedalmahallawieclipselink.service; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import com.ahmedalmahallawi.eclipselink.entity.Department; import com.ahmedalmahallawi.eclipselink.entity.Employee; public class ManyToOne { public static void main( String[ ] args ) { EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" ); EntityManager entitymanager = emfactory.createEntityManager( ); entitymanager.getTransaction( ).begin( ); //Create Department Entity Department department = new Department(); department.setName("Development"); //Store Department entitymanager.persist(department); //Create Employee1 Entity Employee employee1 = new Employee(); employee1.setEname("Satish"); employee1.setSalary(45000.0); employee1.setDeg("Technical Writer"); employee1.setDepartment(department); //Create Employee2 Entity Employee employee2 = new Employee(); employee2.setEname("Krishna"); employee2.setSalary(45000.0); employee2.setDeg("Technical Writer"); employee2.setDepartment(department); //Create Employee3 Entity Employee employee3 = new Employee(); employee3.setEname("Masthanvali"); employee3.setSalary(50000.0); employee3.setDeg("Technical Writer"); employee3.setDepartment(department); //Store Employees entitymanager.persist(employee1); entitymanager.persist(employee2); entitymanager.persist(employee3); entitymanager.getTransaction().commit(); entitymanager.close(); emfactory.close(); } }
بعد تجميع وتنفيذ البرنامج أعلاه ، سوف تحصل على إشعارات في لوحة التحكم الخاصة بـ Eclipse IDE. للإخراج ، تحقق من طاولة عمل MySQL. في هذا المثال ، يتم إنشاء جدولين.
تمرير الاستعلام التالي في واجهة MySQL وتظهر نتيجة جدول القسم في تنسيق جدول كما يلي في الاستعلام:
Select * from department; Id Name 101 Development
تمرير الاستعلام التالي في واجهة MySQL وتظهر نتيجة جدول الموظف في شكل جدول على النحو التالي في الاستعلام:
Select * from employee; Eid Deg Ename Salary Department_Id 102 Technical Writer Satish 45000 101 103 Technical Writer Krishna 45000 101 104 Technical Writer Masthan Wali 50000 101
في الجدول أعلاه ، Deparment_Id هو المفتاح الأجنبي (الحقل المرجعي) من جدول Department.
ثانيا OneToMany@ العلاقة
في هذه العلاقة ، يُشار إلى كل صف من كيان واحد بالعديد من السجلات الفرعية في كيان آخر. الشيء المهم هو أن سجلات الأطفال لا يمكن أن يكون لها عدة آباء في علاقة رأس بأطراف بين الجدول (أ) والجدول (ب) ، يرتبط كل صف في الجدول (أ) بـ 0 أو 1 أو العديد من الصفوف في الجدول (ب).
لننظر في المثال أعلاه. إذا كان الموظف والقسم بطريقة عكسية أحادية الاتجاه ، فإن العلاقة هي علاقة أطراف بأطراف. قم بإنشاء مشروع JPA في الكسوف IDE باسم JPA_Eclipselink_OTM. جميع وحدات هذا المشروع موضحة كالتالي:
إنشاء الكيانات
اتبع الرسم البياني أعلاه لإنشاء الكيانات. قم بإنشاء حزمة باسم "com.ahmedalmahallawi.eclipselink.entity" ضمن حزمة "src". قم بإنشاء فصل باسم Department.java ضمن الحزمة المحددة. يظهر كيان قسم الفصل على النحو التالي:
package com.ahmedalmahallawi.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.ahmedalmahallawi.eclipselink.entity". تظهر فئة كيان الموظف على النحو التالي:
package com.ahmedalmahallawi.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 بواسطة eclipse IDE أثناء إنشاء مشروع JPA. تفاصيل التكوين هي مواصفات المستخدم. يتم عرض ملف persistence.xml كما يلي:
xml version = "1.0" encoding = "UTF-8"?>
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">
name = "Eclipselink_JPA" transaction-type = "RESOURCE_LOCAL">
com.ahmedalmahallawi.eclipselink.entity.Employee
فئات الخدمة
تحتوي هذه الوحدة على فئات الخدمة ، والتي تنفذ الجزء العلائقي باستخدام تهيئة السمة. قم بإنشاء حزمة تحت حزمة 'src باسم' com.ahmedalmahallawi.eclipselink.service '. يتم إنشاء فئة DAO المسمى OneToMany.java ضمن الحزمة المحددة. يتم عرض فئة DAO كالتالي:
package com.ahmedalmahallawieclipselink.service; import java.util.List; import java.util.ArrayList; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import com.ahmedalmahallawi.eclipselink.entity.Department; import com.ahmedalmahallawi.eclipselink.entity.Employee; public class OneToMany { public static void main(String[] args) { EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" ); EntityManager entitymanager = emfactory.createEntityManager( ); entitymanager.getTransaction( ).begin( ); //Create Employee1 Entity Employee employee1 = new Employee(); employee1.setEname("Satish"); employee1.setSalary(45000.0); employee1.setDeg("Technical Writer"); //Create Employee2 Entity Employee employee2 = new Employee(); employee2.setEname("Krishna"); employee2.setSalary(45000.0); employee2.setDeg("Technical Writer"); //Create Employee3 Entity Employee employee3 = new Employee(); employee3.setEname("Masthanvali"); employee3.setSalary(50000.0); employee3.setDeg("Technical Writer"); //Store Employee entitymanager.persist(employee1); entitymanager.persist(employee2); entitymanager.persist(employee3); //Create Employeelist List<Employee> emplist = new ArrayList(); emplist.add(employee1); emplist.add(employee2); emplist.add(employee3); //Create Department Entity Department department = new Department(); department.setName("Development"); department.setEmployeelist(emplist); //Store Department entitymanager.persist(department); entitymanager.getTransaction().commit(); entitymanager.close(); emfactory.close(); } }
بعد تجميع وتنفيذ البرنامج أعلاه ، سوف تحصل على إشعارات في لوحة التحكم الخاصة بـ Eclipse IDE. للتحقق من الإخراج ، منضدة عمل MySQL كما يلي. في هذا المشروع ، يتم إنشاء ثلاثة جداول.
تمرير الاستعلام التالي في واجهة MySQL ، وتظهر نتيجة جدول department_employee بتنسيق جدولي كما يلي في الاستعلام:
Select * from department_Id; Department_Id Employee_Eid 254 251 254 252 254 253
في الجدول أعلاه ، تعد الحقول deparment_id و employee_id هي المفاتيح الخارجية (الحقول المرجعية) من جداول الأقسام والموظفين.
تمرير الاستعلام التالي في واجهة MySQL وتظهر نتيجة جدول القسم في شكل جدول على النحو التالي في الاستعلام:
Select * from department; Id Name 254 Development
تمرير الاستعلام التالي في واجهة MySQL وتظهر نتيجة جدول الموظف في شكل جدول على النحو التالي في الاستعلام:
Select * from employee; Eid Deg Ename Salary 251 Technical Writer Satish 45000 252 Technical Writer Krishna 45000 253 Technical Writer Masthanvali 50000
ثالثا OneToOne@ العلاقة
التسميات: JPA
<< الصفحة الرئيسية