Grails: رسم خرائط فئة المجال (مجموعة من أنواع المستخدمين السباتية)

StackOverflow https://stackoverflow.com/questions/4012853

سؤال

أتساءل عما إذا كان من الممكن تنفيذ نموذج المجال التالي.

دعنا نمتلك فئة مجال تحتوي على مجموعة من الفواصل الزمنية (وقت Joda). يمكنني استخدام org.joda.time.contrib.hibernate.persistraftInterNinterval نوع مستخدم Hibernate لتخطيط الفاصل الزمني إلى جدول قاعدة البيانات (بطريقة مماثلة كما في http://www.grails.org/jodatime+plugin). ومع ذلك ، لا يمكنني معرفة كيفية تنفيذ التعيين إذا كانت لدي فترات زمنية ، وليس فاصل واحد فقط.

مثال:

class Activity {  
   ...    
   Set intervals = []  
   ...  
   static hasMany = [    
       intervals: org.joda.time.Interval  
   ]  

   // This is incorrect implementation, I have set of intervals  
   // and this would be correct if I had only one interval  
   // How to implement mapping in this case?  
   static mapping = {  
       intervals type: PersistentInterval, {  
           column name: "start"  
           column name: "end"  
       }  
   }  

}

يفشل التنفيذ أعلاه مع الخطأ التالي:

2010-10-23 18: 30: 25،483 [Main] Context.GrailsContextLoader-خطأ في تنفيذ bootstraps: خطأ في إنشاء الفول مع اسم "Messagesource": فشل تهيئة Bean ؛ الاستثناء المتداخل هو org.springframework.beans.factory.beancreationException: خطأ في إنشاء الفول مع اسم "المعاملات": لا يمكن حل الإشارة إلى Bean 'SessionFactory "أثناء تعيين خاصية Bean' SessionFactory ؛ الاستثناء المتداخل هو org.springframework.beans.factory.beancreationException: خطأ في إنشاء الفول مع اسم "SessionFactory": فشل الاحتجاج من طريقة init ؛ الاستثناء المتداخل هو org.hibernate.mappingException: المفتاح الأجنبي (FK4FDC5B1E5107CA0: يجب أن يكون للنشاط_ إنشاء الفول مع اسم "Messagesource": فشل تهيئة الفول ؛ الاستثناء المتداخل هو org.springframework.beans.factory.beancreationException: خطأ في إنشاء الفول مع اسم "المعاملات": لا يمكن حل الإشارة إلى Bean 'SessionFactory "أثناء تعيين خاصية Bean' SessionFactory ؛ الاستثناء المتداخل هو org.springframework.beans.factory.beancreationException: خطأ في إنشاء الفول مع اسم "SessionFactory": فشل الاحتجاج من طريقة init ؛ الاستثناء المتداخل هو org.hibernate.mappingException: المفتاح الخارجي (FK4FDC5B1E5107CA0: Activity_intervals [start ، end])) tomcatserver.groovy: 212)

اعتقدت أن العمل في هذه المشكلة هو استخراج الفاصل الزمني لفصل فئة المجال الفاصل الزمني وتحديد التعيين داخلها. ومع ذلك ، فإن الفاصل الزمني هو الطبقة النهائية ، لذا فإن التمديد غير ممكن.

شكرا لنصائحك.

هل كانت مفيدة؟

المحلول

أنا أرد سؤالي الخاص ، ربما ستكون هذه الإجابة مفيدة لشخص ما.

حتى الآن لم أجد طريقة واحدة فقط كيفية تنفيذ نموذج معين - بواسطة ملفات رسم خرائط XML Hibernate:

<hibernate-mapping package="mappingtest">  
    <class name="Activity">  
        <id name="id">  
            <generator class="native"/>  
        </id>  
        <set name="intervals">  
            <key column="activity_id" not-null="true"/>  
            <element type="org.joda.time.contrib.hibernate.PersistentInterval">  
                <column name="startDate"/>  
                <column name="endDate"/>  
            </element>  
        </set>  
    </class>  
</hibernate-mapping>  

وتنفيذ فئة المجال:

class Activity {    
    Long id    
    Set intervals = []

    static constraints = {
    }
}

اضطررت أيضًا إلى نقل فئة المجال من Grails-App/Domain إلى دليل SRC/Groovy ، وإلا فشل تشغيل التطبيق مع (Grails-1.3.5):

...
org.hibernate.duplicateMappingException: MappingTest.
...

المشكلة الثانية في التنفيذ أعلاه التي اكتشفتها هي أنه عندما قمت بتشغيل السقالات (لغرض الاختبار) بواسطة:

class ActivityController {
    static scaffold = true
    ...
}

فشل عرض النشاط الذي تم إنشاؤه مع الخطأ:

رسالة استثناء: لا يوجد مثل هذا الخاصية: معرف للفئة: org.joda.time.interval الحلول الممكنة: النهاية الناتجة عن: خطأ في تقييم التعبير [I.ID] على السطر [38]: لا يوجد مثل هذا الخاصية: معرف للفئة: org.joda .Time.Interval الحلول الممكنة: نهاية

لكن التنفيذ اليدوي للحصول على أنشطة من DB وعرضها يعمل.

تحرير: بالإضافة إلى ذلك ، وجدت حلًا لقضايا السقالات و duplicatemappexception. كانت ناتجة عن موقع غير صالح للنشاط. hbm.xml - كانت بنية دليل الحزمة مفقودة. الموقع الصحيح هو Grails-App/Conf/Hibernate/MappingTest/Activity.hbm.xml.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top