هل لا تزال معايير السبات API لا تدعم العلاقات المتداخلة

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

سؤال

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

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

   if (!lookupBean.getCompanyInput().equals("")) {
       criteria.add(Restrictions.like("company.company", lookupBean.getCompanyInput() + "%"));
   }

تعديل:

إليك شفطي المعامل بشكل صحيح لإنجاز ما كنت أحاول أعلاه، باستخدام الاقتراح من الإجابة الأولى أدناه؛ لاحظ أنني حتى استخدام مكالمة محترفا إضافية للطلب في سمة في كائن / جدول / جدول آخر:

if (!lookupBean.getCompanyValue().equals("")) {
    criteria.createCriteria("company").add(
           Restrictions.like("company", lookupBean.getCompanyValue() + "%"));
}

List<TrailerDetail> tdList = 
        criteria.createCriteria("location").addOrder(Order.asc("location")).list();
هل كانت مفيدة؟

المحلول

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

List<Order> orders = session.createCriteria(Order.class)
    .createCriteria("user")
        .add(eq("name", "fred"))
    .list();

إذا كنت تتحدث عن كيان لديه علاقة بالنهطة، فمن يجب أن تعمل كذلك. يمكنك أيضا استبدال "الاسم" باستخدام "معرف" إذا كنت بحاجة إلى التصفية على معرف كائن مرتبط.

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