معايير السبات - الاستعلام عن الجداول في علاقة n:m

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

سؤال

أحاول إنشاء استعلام بمعايير السبات للسيناريو التالي:

  • كيانان:المؤشر والتقرير (لكل منهما جداوله وفئاته وما إلى ذلك)
  • يمكن استخدام المؤشر من صفر إلى العديد من التقارير
  • يستخدم التقرير صفرًا للعديد من المؤشرات
  • لذلك، لدي جدول تقاطع لتخزين العلاقة
  • يتم تعريف العلاقة في كلا الفئتين وتخطيطات السبات الخاصة بهم
  • في واجهة المستخدم، يمكن للمستخدم تحديد تقرير واحد أو عدة تقارير (من بين أشياء أخرى)، وأود الاستعلام عن قاعدة البيانات للمؤشرات المستخدمة في هذه التقارير

لقد حاولت ما يلي:

criteria.add(Restrictions.in("Reports", selectedReports));

ولكن كل ما أحصل عليه هو عبارة SQL غريبة

where this_.Indicator_ID in (?)

ثم استثناء JDBC (معلمة مفقودة)

أيه أفكار؟شكرًا.

ملحوظة:لقد بحثت في الاستعلام عن علاقة ManyToMany بمعايير السبات, ، ولكن الحل المقبول هو إنشاء سلسلة SQL مخصصة ...

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

المحلول

  Criteria c = session.createCriteria(Indicator.class);
    c.add(Restrictions.eq("someField", myObject).createCriteria("reports")
    .add(Restrictions.eq("reportName", name);
    c.list();

تحتاج إلى إنشاء معايير فرعية للكيان المحتجز في مجموعة على كيان آخر.

String[] selectedReportsId = {"1", "2", "3"};
 c.add(Restrictions.eq("someField",myObject).createCriteria("reports")
    .add(Restrictions.in("id", selectedReportsId);

ثم تحقق من الجزء المتعلق بتحويل النتائج من هنا:https://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/querycriteria.html#querycriteria-associations

قد يلقي هذا أيضًا بعض الضوء على ما يمكنك فعله وفقًا للمعايير:http://www.hibernate.org/hib_docs/v3/api/org/hibernate/criterion/Restrictions.html

نصائح أخرى

إذا كان لا بد من ذلك، فإليك بعض الاقتراحات التي عادت بها Google بعد البحث عن "الإسبات hql متعدد إلى متعدد":

http://patf.net/blogs/index.php?blog=2&c=1&more=1&pb=1&tb=1&title=many_to_many_in_hql

ومن منتديات السبات :

http://forum.hibernate.org/viewtopic.php?p=2340747&sid=d4c8d2fcc16aed0201f73eb74619692a

ومن منتديات الربيع :

http://forum.springframework.org/showthread.php?t=36870

نأمل أن تساعد هذه.

في الوقت الحالي، هذه هي الطريقة التي جعلتني أعمل بها (بفضل zmf).

Criteria subcrit = criteria.createCriteria("Reports");
Disjunction dis = Restrictions.disjunction();
for (Reports r : selectedReports) {
    dis.add(Restrictions.idEq(r.getID()));
}
subcrit.add(dis);

هذا هو بالضبط ما اقترحه zmf تقريبًا، كل ما أضفته هو الانفصال لبناء المعايير من المجموعة التي تم تمريرها.

كل ما تبقى عليك فعله هو محاولة استخدام المجموعة مباشرة...

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