1. رسم الخرائط الجمع
مزيج هو حالة خاصة لعلاقات الارتباط وعلاقة مع أعلى درجة من الاقتران. الكائن الرئيسي والكائن الفرعي للمجموعة لهما نفس دورة الحياة. إذا مات الكائن الرئيسي ، فسوف يموت الكائن الفرعي أيضًا. هنا نستخدم أرباب العمل والمستخدمين كأمثلة. كل من المستخدمين وأرباب العمل لديهم سمات معلومات الاتصال. إذا كنت تفكر في منظور كائن ما ، فسترسم غالبًا نموذج الكائن إلى طريقة تركيبة لتجريد فئة معلومات الاتصال الشائعة. ثم يتضمن الشخصان كائنات معلومات الاتصال المقابلة. عند مواجهة نموذج الكائن المقابل ، يظهر مثال الكائن في الشكل أدناه:
بعد أن يقوم نموذج الكائن المدمج بإنشاء نموذج العلاقة المقابل ، سيتم تضمين الفئة الفرعية المقابلة في الجدول الرئيسي ، وبالتالي فإن بنية الجدول المقابلة ستولد السمات المقابلة في الجدول المقابل. هيكل الجدول المقابل على النحو التالي:
1.1 فئة الموظفين ورسم الخرائط
في نموذج الكائن ، هناك علاقة إدراج بين الموظف والاتصال. عند كتابة الرمز ، تحتاج إلى تضمين كائن الاتصال في الموظف. يحتاج ملف التعيين المقابل أيضًا إلى رسم خرائط لكائنات الاتصال. يجب استخدام علامة <Pontent> للإشارة إلى الكائنات المدمجة وإضافة خصائص الكائن إلى علامة الكائن.
القائمة: الموظف. بالإضافة إلى الخصائص الأساسية ، يحتاج ملف الفصل أيضًا إلى تعبئة كائنات الاتصال لأن هناك طبقة من العلاقة بينهما.
حزمة com.src.hibernate ؛ موظف الطبقة العامة {// رقم معرف المعرف الخاص ؛ public int getId () {return id ؛ } public void setId (int id) {this.id = id ؛ } // اسم اسم السلسلة الخاصة ؛ السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } // contact object private contact usercontact ؛ الاتصال العام getUserContact () {return UserContact ؛ } public void setUserContact (اتصل بـ UserContact) {this.userContact = UserContact ؛ }}القائمة 2: efferene.hbm.xml ، أضف ملف التعيين المقابل. يجب وضع علامة على الكائنات المركبة المعينة بـ <component> ، وإضافة سمات الكائن المقابلة إلى العلامة. الرمز المحدد كما يلي:
<؟ table = "t_employee"> <name name = "id"> <generator/> </id> <property name = "name"/> <component name = "exereEecontact"> <property name = "email"/> <spertar
1.2 ملفات فئة المستخدم والتكوين
القائمة 3: user.java ، بنية المحتوى الخاصة بها هي نفسها هيكل الموظف. لن أقول الكثير عن الآخرين ، انظر إلى الكود:
حزمة com.src.hibernate ؛ مستخدم الفئة العامة {// رقم معرف المعرف الخاص ؛ public int getId () {return id ؛ } public void setId (int id) {this.id = id ؛ } // اسم اسم السلسلة الخاصة ؛ السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } // contact object private contact usercontact ؛ الاتصال العام getUserContact () {return UserContact ؛ } public void setUserContact (اتصل بـ UserContact) {this.userContact = UserContact ؛ }}القائمة 4: user.hbm.xml ، هيكل المحتوى الخاص به هو نفسه هيكل الموظف. الأمر بسيط للغاية ، والرمز كما يلي:
<؟ xml version = "1.0"؟> <! doctype hibernate-mapping public "-// hibernate/hibernate mapping dtd 3.0 // en en" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <Hibernate> <sameibert table = "t_user"> <id name = "id"> <generator/generator/> </id> <property name = "name"/> <component name = "UserContact"> <property name = "email"/> <spertar
1.3 Contact.Java Class
لا يوجد شيء يثير الانتباه إليه في هذا الملف الفئة. يمكنك إضافة خصائص أساسية ولا تحتاج إلى تكوين التعيينات المقابلة لهذه الفئة ، وبالتالي فإن محتواه بسيط للغاية.
حزمة com.src.hibernate ؛ جهة الاتصال بالفئة العامة {// عنوان البريد الإلكتروني للسلسلة الخاصة ؛ السلسلة العامة getEmail () {return email ؛ } public void setemail (string email) {this.email = email ؛ } // العنوان عنوان السلسلة الخاصة ؛ السلسلة العامة getAddress () {return address ؛ } public void setAddress (عنوان السلسلة) {this.address = العنوان ؛ } // post code zipcode zipcode ؛ السلسلة العامة getzipcode () {return zipcode ؛ } public void setzipcode (string zipcode) {this.zipcode = zipcode ؛ } // رقم الاتصال بالسلسلة الخاصة contacttel ؛ السلسلة العامة getContactTel () {return contacttel ؛ } public void setContactTel (string contacttel) {this.contacttel = contacttel ؛ }} 1.4 توليد النتائج
بعد تكوين الملف أعلاه ، يمكن إنشاء بنية جدول قاعدة البيانات المقابلة. بيان SQL الذي تم إنشاؤه هو كما يلي:
جدول إسقاط إذا كان موجوداً T_employee ، إذا كان موجودًا t_user ، قم بإنشاء جدول t_employee (ID integer not null auto_increment ، name varchar (255) Varchar (255) ، البريد الإلكتروني Varchar (255) ، العنوان Varchar (255) ، Zipcode varchar (255) ، Contacttel varchar (255) ، المفتاح الأساسي (معرف))
بنية جدول قاعدة البيانات التي تم إنشاؤها هي كما يلي:
2. تشغيل البيانات
هيكل الجدول الذي تم الحصول عليه من خلال الجمع بين التعيين هو جدول كامل ، بحيث يمكن تنفيذ الطريقة الأكثر أصالة عند كتابة البيانات والقراءة. نستخدم هنا أيضًا طرق الاختبار المستخدمة في المقالات السابقة لكتابة البيانات وقراءتها ، والتي هي استخدام طرق حفظ وتحميل ، انظر أدناه لعمليات محددة.
2.1 إدراج البيانات
هنا ، يتم استخدام المستخدم كمثال ، وتكون عملية الكتابة للموظف هي نفس عملية المستخدم. عند كتابة البيانات ، يجب إنشاء كائنين ، أحدهما كائن الاتصال والآخر هو كائن المستخدم. عند الحفظ ، يجب حفظ كائن المستخدم فقط ، وسيتم حفظ كائن الاتصال المقابل معًا.
public void testSave1 () {// إعلان جلسة كائن الجلسة = null ؛ حاول {// الحصول على جلسة كائن الجلسة = hibernateutils.getSession () ؛ // فتح الجلسة. begintransaction () ؛ // إنشاء كائن الاتصال اتصل بـ USERCONTACT = New Contact () ؛ UserContact.setAddress ("بكين") ؛ UserContact.setContacttel ("1243435") ؛ UserContact.setemail ("[email protected]") ؛ UserContact.setzipcode ("zipcode") ؛ // إنشاء مستخدم كائن المستخدم = مستخدم جديد () ؛ user.setName ("Zhangsan") ؛ user.setUserContact (UserContact) ؛ Session.save (user) ؛ // sump session.getTransaction (). commice () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ Session.getTransaction (). Rollback () ؛ } أخيرًا {hibernateUtils.Closedessesse (الجلسة) ؛ }} بيان SQL الذي تم إنشاؤه:
أدخل في T_USER (الاسم ، البريد الإلكتروني ، العنوان ، zipcode ، contacttel) قيم (؟ ،؟ ،؟ ،؟ ،؟)
تحقق من بنية الجدول على النحو التالي:
2.2 قراءة العملية
باستخدام المستخدم أيضًا كمثال ، فإن عمليات الموظف هي نفس كائن المستخدم. عملية القراءة بسيطة للغاية ، الرمز كما يلي:
public void testload1 () {// إعلان جلسة جلسة كائن الجلسة = null ؛ حاول {// الحصول على جلسة كائن الجلسة = hibernateutils.getSession () ؛ // فتح الجلسة. begintransaction () ؛ // احصل على مستخدم مستخدم كائن المستخدم = (المستخدم). تحميل (user.class ، 1) ؛ System.out.println ("اسم المستخدم:"+user.getName ()) ؛ // إرسال الجلسة. getTransaction (). الالتزام () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ Session.getTransaction (). Rollback () ؛ } أخيرًا {hibernateUtils.Closedessesse (الجلسة) ؛ }}يتم إنشاء النتائج المقابلة على النحو التالي:
hibernate: حدد user0_.id as id0_0_ ، user0_.name as name0_0_ ، user0_.email as semail0_0_ ، user0_.address as address0_0_ ، user0_ اسم المستخدم: تشانغسان
ثالثا. أمثلة شاملة
حساب:
حساب الطبقة العامة ينفذ مسلسل {private int id ؛ أموال مزدوجة خاصة ؛ عنوان العنوان الخاص ؛ public int getId () {return id ؛ } public void setId (int id) {this.id = id ؛ } public double getMoney () {return money ؛ } public void setMoney (Double Money) {this.money = money ؛ } العنوان العام getAddress () {return address ؛ } public void setaddress (عنوان العنوان) {this.address = address ؛ }} عنوان:
عنوان الطبقة العامة يطبق قابلة للتسلسل {كود السلسلة الخاصة ؛ سيتي سلسلة خاصة ؛ مقاطعة سلسلة خاصة ؛ السلسلة العامة getCode () {Return Code ؛ } public void setCode (string code) {this.code = code ؛ } السلسلة العامة getCity () {return City ؛ } public void setCity (String City) {this.city = City ؛ } السلسلة العامة getProvince () {Return Province ؛ } public void setProvince (String Province) {this.province = Province ؛ }} account.hbm.xml:
<؟ أدوات-> <hibernate mapping package = "pojo"> <class name = "account" table = "t_account"> <id name = "id"> <column name = "id"> </bolul> <erederator> </enderator> </id> <property name = "money"> name = "code"> </bolumen> </property> <property name = "city"> <column name = "city"> </boluls> </property> <property name = "profince">