سؤال

أنا أستخدم Hibernate 3.2، وأستخدم المعايير لإنشاء استعلام.أرغب في إضافة و"الترتيب حسب" لاقتران متعدد إلى واحد، لكنني لا أرى كيف يمكن القيام بذلك.أعتقد أن استعلام السبات سينتهي بهذا الشكل، على ما أعتقد:

select t1.a, t1.b, t1.c, t2.dd, t2.ee
from t1
inner join t2 on t1.a = t2.aa
order by t2.dd   <-- need to add this

لقد حاولت المعايير.addOrder("assnName.propertyName") لكنها لا تعمل.أعلم أنه يمكن القيام به للخصائص العادية.هل فاتني شيء؟

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

المحلول

وطيب، وجدت الجواب. حاولت شيء لم أكن أعتقد أن العمل، ولكن لدهشتي به. كنت أحاول هذا:

Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class);

criteria.addOrder(Order.asc("assnName.propertyName"))

ولكن ماذا عملت في الواقع كان:

Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class);
Criteria assnCrit = criteria.createCriteria("assnName");

assnCrit.addOrder(Order.asc("propertyName"));

وكنت قد قدمت افتراض أن طريقة addOrder () كان يمكن استخدامها فقط على المعايير الرئيسية وليس على أي معايير الجمعية.

نصائح أخرى

كنت أواجه نفس المشكلة ويمكن حلها أيضًا على النحو التالي:

Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class)
  .createAlias("assnName","a")
  .addOrder(Order.asc("a.propertyName"));

يتيح لك createAlias ​​الاحتفاظ بجذور معاييرك في كيانك الأصلي (WipDiscreteJob.class في هذه الحالة) حتى تتمكن من الاستمرار في إنشاء معاييرك في حالة احتياجك إليها (على سبيل المثال، إذا كنت بحاجة إلى طلب ثانٍ حسب الخاصية من كيانك الأصلي) .

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