كائنات الفرز بناء على طرق فئة المجال المخصصة

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

  •  19-09-2019
  •  | 
  •  

سؤال

لدي فئة مجال، حيث حددت بعض الأساليب التي تعطي الكائن درجة بناء على خوارزميات مختلفة (على سبيل المثال الشعبية).

أرغب الآن في استرداد قائمة بهذه الكائنات مرتبة حسب أحد هذه الدرجات (على سبيل المثال. تنازلي عن طريق درجة شعبية).

هل هناك طريقة للقيام بها مع غورم؟

مثال فئة:

class SomeObject {
    String title

    Integer popularity() {
        //some algorithm
        return popularity
    }
}
هل كانت مفيدة؟

المحلول

جاريد وأنت على حق. نظرا لأنها قيمة محسوبة وغير مخزنة في DB، فإن Gorm لا يوجد لديه طريقة لمعرفة أي شيء حيال ذلك. إذا قمت بذلك كما تقول وإنشاء عمود جديد للقيمة ثم قم بتحديثه حسب الحاجة يمكنك استخدام SomeObject.list(order:'desc', sort: 'popularity', max:10) بناء الجملة.

نصائح أخرى

هناك ثلاث حلول يمكنني التفكير فيها. على افتراض أن مجموعة البيانات الخاصة بك صغيرة يمكنك فقط إرجاع القائمة بأكملها ثم فرزها. علي سبيل المثال

objectList.sort{popularity()}

ملاحظة بناء على الرابط التالي. http://glorenzen.blogspot.com/2008/05/groovy-sort-list.html.

إذا كانت صيغة الحساب بسيطة، فيمكنك دائما استخدام استعلام HQL بدلا من العثور الافتراضي بواسطة الأساليب. HQL هي لغة استعلام مشابهة ل SQL تعمل على كائنات السبات التي هي ما تم بناء غورم. لمزيد من المعلومات، راجع الرابط التالي.http://docs.jboss.org/hibernate/core/3.3/Reference/en/html/queryhql.html.إذا كنت لا تحتاج إلى تحديث الحقل المحسوب في الوقت الفعلي، فهناك حساباتك معقدة ل HQL، فيمكنك جدولة مهمة لتحديث نتائج الحساب كل ساعة أو نحو ذلك، ثم قم بتخزين النتيجة التي تم إنشاؤها في مجال مجالك صف دراسي. لمزيد من المعلومات حول جدولة جدولة البحث عن الرابط التالي.http://grails.org/job+scheduling+٪28Quartz٪29.

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