التخطيط المتقدم JPA - Advanced Mappings
التخطيط المتقدم JPA - Advanced Mappings
التخطيط المتقدم JPA - Advanced Mappings
JPA هي مكتبة تم إصدارها بمواصفات java. لذلك ، يدعم كل المفاهيم الموجهة للكائنات لاستمرار الكيان. حتى الآن لقد انتهينا من أساسيات رسم الخرائط الكائن العلائقية. يأخذك هذا الفصل خلال التعيينات المتقدمة بين الكائنات والكيانات العلائقية.
استراتيجيات الوراثة
الوراثة هي المفهوم الأساسي للغة الموجهة للكائنات ، وبالتالي يمكننا استخدام علاقات الوراثة أو الاستراتيجيات بين الكيانات. يدعم JPA ثلاثة أنواع من استراتيجيات الميراث مثل SINGLE_TABLE و JOINED_TABLE و TABLE_PER_CONCRETE_CLASS.
دعنا نفكر في مثال على صفوف أعضاء هيئة التدريس وفصول التدريس و NonTeachingStaff وعلاقاتهم كما يلي:
في الرسم التوضيحي الموضح أعلاه ، يعد الموظفون كيانًا ، و TeachingStaff و NonTeachingStaff هما الكيانان الفرعيان للموظفين. هنا سنناقش المثال أعلاه في جميع الاستراتيجيات الثلاثة للميراث.
استراتيجية جدول واحد
تأخذ استراتيجية الجدول المفرد جميع حقول الفئات (كلا الفصول الفائقة والفرعية) وتعيينها في جدول واحد يُعرف باسم استراتيجية SINGLE_TABLE. تلعب قيمة التمييز هنا دورًا رئيسيًا في التمييز بين قيم الكيانات الثلاثة في جدول واحد.
دعنا نأخذ في الاعتبار المثال أعلاه ، TeachingStaff و NonTeachingStaff هما الفصول الفرعية لموظفي الفصل. ذكِّر مفهوم الميراث (هو آلية وراثة لخصائص الفئة الفائقة حسب الفئة الفرعية) ، وبالتالي فإن sID ، هي الحقول التي تنتمي إلى كل من TeachingStaff و NonTeachingStaff. إنشاء مشروع JPA. جميع وحدات هذا المشروع هي كما يلي:
إنشاء الكيانات
قم بإنشاء حزمة باسم "com.ahmedalmahallawi.eclipselink.entity" ضمن حزمة "src". إنشاء فئة جافا جديدة باسم Staff.java تحت معين ...
package com.ahmedalmahallawi.eclipselink.entity; import java.io.Serializable; import javax.persistence.DiscriminatorColumn; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Table; @Entity @Table @Inheritance( strategy = InheritanceType.SINGLE_TABLE ) @DiscriminatorColumn( name = "type" ) public class Staff implements Serializable { @Id @GeneratedValue( strategy = GenerationType.AUTO ) private int sid; private String sname; public Staff( int sid, String sname ) { super( ); this.sid = sid; this.sname = sname; } public Staff( ) { super( ); } public int getSid( ) { return sid; } public void setSid( int sid ) { this.sid = sid; } public String getSname( ) { return sname; } public void setSname( String sname ) { this.sname = sname; } }
في الكود أعلاهDescriminatorColumn ، يُظهر اسم الحقل (النوع) وقيمه الحقول المتبقية (Teaching and NonTeachingStaff) المتبقية.
إنشاء فئة فرعية (فئة) إلى فئة الموظفين المسمى TeachingStaff.java ضمن الحزمة com.ahmedalmahallawi.eclipselink.entity. يتم عرض فئة هيئة التدريس على النحو التالي:
package com.ahmedalmahallawi.eclipselink.entity; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @Entity @DiscriminatorValue( value="TS" ) public class TeachingStaff extends Staff { private String qualification; private String subjectexpertise; public TeachingStaff( int sid, String sname, String qualification,String subjectexpertise ) { super( sid, sname ); this.qualification = qualification; this.subjectexpertise = subjectexpertise; } public TeachingStaff( ) { super( ); } public String getQualification( ){ return qualification; } public void setQualification( String qualification ){ this.qualification = qualification; } public String getSubjectexpertise( ) { return subjectexpertise; } public void setSubjectexpertise( String subjectexpertise ){ this.subjectexpertise = subjectexpertise; } }
إنشاء فئة فرعية (فئة) إلى فئة الموظفين المسمى NonTeachingStaff.java ضمن الحزمة com.ahmedalmahallawi.eclipselink.entity. يتم عرض فئة كيان NonTeachingStaff على النحو التالي:
package com.ahmedalmahallawi.eclipselink.entity; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @Entity @DiscriminatorValue( value = "NS" ) public class NonTeachingStaff extends Staff { private String areaexpertise; public NonTeachingStaff( int sid, String sname, String areaexpertise ) { super( sid, sname ); this.areaexpertise = areaexpertise; } public NonTeachingStaff( ) { super( ); } public String getAreaexpertise( ) { return areaexpertise; } public void setAreaexpertise( String areaexpertise ){ this.areaexpertise = areaexpertise; } }
Persistence.xml
يحتوي ملف Persistence.xml على معلومات التكوين لقاعدة البيانات ومعلومات التسجيل لفئات الكيانات. يظهر ملف 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.Staff
فئة الخدمة se
فئات الخدمة هي جزء تنفيذ مكون الأعمال. قم بإنشاء حزمة تحت حزمة 'src باسم' com.ahmedalmahallawi.eclipselink.service '.
قم بإنشاء فصل دراسي باسم SaveClient.java ضمن الحزمة المحددة لتخزين حقول فئة الموظفين و TeachingStaff و NonTeachingStaff. يتم عرض
package com.ahmedalmahallawi.eclipselink.service; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import com.ahmedalmahallawi.eclipselink.entity.NonTeachingStaff; import com.ahmedalmahallawi.eclipselink.entity.TeachingStaff; public class SaveClient { public static void main( String[ ] args ) { EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" ); EntityManager entitymanager = emfactory.createEntityManager( ); entitymanager.getTransaction( ).begin( ); //Teaching staff entity TeachingStaff ts1=new TeachingStaff(1,"Gopal","MSc MEd","Maths"); TeachingStaff ts2=new TeachingStaff(2, "Manisha", "BSc BEd", "English"); //Non-Teaching Staff entity NonTeachingStaff nts1=new NonTeachingStaff(3, "Satish", "Accounts"); NonTeachingStaff nts2=new NonTeachingStaff(4, "Krishna", "Office Admin"); //storing all entities entitymanager.persist(ts1); entitymanager.persist(ts2); entitymanager.persist(nts1);
entitymanager.persist(nts2); entitymanager.getTransaction().commit(); entitymanager.close(); emfactory.close(); }
}
بعد تجميع وتنفيذ البرنامج أعلاه ، سوف تحصل على إشعارات في لوحة التحكم الخاصة بـ Eclipse IDE. تحقق من MySQL طاولة العمل للإخراج. يظهر الإخراج في تنسيق جدول كما يلي:
Sid | Type | Sname | Areaexpertise | Qualification | Subjectexpertise |
---|---|---|---|---|---|
1 | TS | Gopal | MSC MED | Maths | |
2 | TS | Manisha | BSC BED | English | |
3 | NS | Satish | Accounts | ||
4 | NS | Krishna | Office Admin |
أخيرًا ستحصل على جدول واحد يحتوي على حقول الصفوف الثلاثة ويختلف مع عمود التمييز المسمى "النوع".
انضم الجدول استراتيجية
تتمثل استراتيجية الجدول المنضم في مشاركة العمود المشار إليه والذي يحتوي على قيم فريدة للانضمام إلى الجدول وإجراء معاملات سهلة. دعونا نفكر في نفس المثال على النحو الوارد أعلاه.
إنشاء مشروع JPA. جميع وحدات المشروع الموضحة كالتالي:
إنشاء الكيانات
قم بإنشاء حزمة باسم "com.ahmedalmahallawi.eclipselink.entity" ضمن حزمة "src". قم بإنشاء فئة java جديدة باسم Staff.java ضمن الحزمة المحددة. يتم عرض فئة كيان الموظفين على النحو التالي:
entitymanager.getTransaction().commit(); entitymanager.close(); emfactory.close(); } }
بعد تجميع وتنفيذ البرنامج أعلاه ، سوف تحصل على إشعارات في لوحة التحكم الخاصة بـ Eclipse IDE. للتحقق من الإخراج ، منضدة عمل MySQL كما يلي:
هنا يتم إنشاء ثلاثة جداول وتظهر نتيجة جدول الموظفين في شكل جدول على النحو التالي:
Sid | Dtype | Sname |
---|---|---|
1 | TeachingStaff | Gopal |
2 | TeachingStaff | Manisha |
3 | NonTeachingStaff | Satish |
4 | NonTeachingStaff | Krishna |
تظهر نتيجة جدول TeachingStaff بتنسيق جدولي كما يلي:
Sid | Qualification | Subjectexpertise |
---|---|---|
1 | MSC MED | Maths |
2 | BSC BED | English |
في الجدول أعلاه ، يعد sid هو المفتاح الخارجي (جدول الموظفين في حقل نموذج مرجعي). تظهر نتيجة جدول NonTeachingStaff في شكل جدول كما يلي:
Sid | Areaexpertise |
---|---|
3 | Accounts |
4 | Office Admin |
أخيرًا ، يتم إنشاء الجداول الثلاثة باستخدام حقولهم على التوالي ، ويتم مشاركة حقل SID بواسطة الجداول الثلاثة. جدول الموظفين هو مفتاح أساسي ، في الجداول المتبقية (TeachingStaff و NonTeachingStaff) SID هو مفتاح خارجي.
الجدول حسب استراتيجية الصف
استراتيجية الجدول حسب الفئة هي إنشاء جدول لكل كيان فرعي. سيتم إنشاء جدول الموظفين ولكنه سيحتوي على سجلات خالية. يجب مشاركة قيم الحقول في جدول "الموظفين" بواسطة جداول التدريس و NonTeachingStaff.
دعونا نفكر في نفس المثال على النحو الوارد أعلاه. تظهر جميع وحدات هذا المشروع على النحو التالي:
إنشاء الكيانات
قم بإنشاء حزمة باسم "com.ahmedalmahallawi.eclipselink.entity" ضمن حزمة "src". قم بإنشاء فئة java جديدة باسم Staff.java ضمن الحزمة المحددة. يتم عرض فئة كيان الموظفين على النحو التالي:
إنشاء فئة فرعية (فئة) إلى فئة الموظفين المسمى TeachingStaff.java ضمن الحزمة com.ahmedalmahallawi.eclipselink.entity. يتم عرض فئة هيئة التدريس على النحو التالي:
إنشاء فئة فرعية (فئة) إلى فئة الموظفين المسمى NonTeachingStaff.java ضمن الحزمة com.ahmedalmahallawi.eclipselink.entity. يتم عرض فئة كيان NonTeachingStaff على النحو التالي:
Persistence.xml
يحتوي ملف Persistence.xml على معلومات التكوين لقاعدة البيانات ومعلومات التسجيل لفئات الكيانات. يظهر ملف xml كالتالي:
package com.ahmedalmahallawi.eclipselink.entity; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Table; @Entity @Table @Inheritance( strategy = InheritanceType.TABLE_PER_CLASS ) public class Staff implements Serializable { @Id @GeneratedValue( strategy = GenerationType.AUTO ) private int sid; private String sname; public Staff( int sid, String sname ) { super( ); this.sid = sid; this.sname = sname; } public Staff( ) { super( ); } public int getSid( ) { return sid; } public void setSid( int sid ) { this.sid = sid; } public String getSname( ) { return sname; } public void setSname( String sname ) { this.sname = sname; } }
إنشاء فئة فرعية (فئة) إلى فئة الموظفين المسمى TeachingStaff.java ضمن الحزمة com.ahmedalmahallawi.eclipselink.entity. يتم عرض فئة هيئة التدريس على النحو التالي:
package com.ahmedalmahallawi.eclipselink.entity; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @Entity public class TeachingStaff extends Staff { private String qualification; private String subjectexpertise; public TeachingStaff( int sid, String sname, String qualification, String subjectexpertise ) { super( sid, sname ); this.qualification = qualification; this.subjectexpertise = subjectexpertise; } public TeachingStaff( ) { super( ); } public String getQualification( ){ return qualification; } public void setQualification( String qualification ) { this.qualification = qualification; } public String getSubjectexpertise( ) { return subjectexpertise; } public void setSubjectexpertise( String subjectexpertise ){ this.subjectexpertise = subjectexpertise; } }
إنشاء فئة فرعية (فئة) إلى فئة الموظفين المسمى NonTeachingStaff.java ضمن الحزمة com.ahmedalmahallawi.eclipselink.entity. يتم عرض فئة كيان NonTeachingStaff على النحو التالي:
package com.ahmedalmahallawi.eclipselink.entity; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @Entity public class NonTeachingStaff extends Staff { private String areaexpertise; public NonTeachingStaff( int sid, String sname, String areaexpertise ) { super( sid, sname ); this.areaexpertise = areaexpertise; } public NonTeachingStaff( ) { super( ); } public String getAreaexpertise( ) { return areaexpertise; } public void setAreaexpertise( String areaexpertise ) { this.areaexpertise = areaexpertise; } }
Persistence.xml
يحتوي ملف Persistence.xml على معلومات التكوين لقاعدة البيانات ومعلومات التسجيل لفئات الكيانات. يظهر ملف 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.Staff
فئة الخدمة
فئات الخدمة هي جزء تنفيذ مكون الأعمال. قم بإنشاء حزمة تحت حزمة 'src باسم' com.ahmedalmahallawi.eclipselink.service '.
قم بإنشاء فصل دراسي باسم SaveClient.java ضمن الحزمة المحددة لتخزين حقول فئة الموظفين و TeachingStaff و NonTeachingStaff. يتم عرض فئة SaveClient على النحو التالي
التسميات: JPA
<< الصفحة الرئيسية