استعلام EJB3 + في البند
سؤال
أحتاج إلى استخدام جملة IN مثل SQL التالي
SELECT * FROM tableA WHERE colA in (1, 2,3)
كيف يمكنني القيام بذلك في EJBQL؟
لقد حاولت ما يلي، والذي فشل بوضوح:
SELECT tab FROM tableA tab WHERE tab.colA in (:colValues)
ثم فعلت ذلك في جافا
query.setParameter("colValues","1,2,3")
هذا يعطيني الاستثناء التالي
org.apache.openjpa.lib.jdbc.ReportingSQLException: ORA-01722: invalid number
المحلول
والمشكلة هي عند استخدام :parameter_name
في جزء SQL ثم استدعاء query. setParamter("parameter_name", values)
من المتوقع أن values
يجب أن يكون نوعا من collection
. جرب هذا.
List<Integer> values = new ArrayList<Integer>();
values.add(1);
values.add(2);
values.add(3);
query.setParameter("colValues", values);
نصائح أخرى
لقد مر وقت طويل منذ أن قمت بـ EJBQL، لكن هذا يجب أن ينجح:
SELECT OBJECT(t)
FROM Tab AS t
WHERE t.colA IN (:colValues)
قد تحتاج أيضًا إلى تعيين colValues كصفيف من الأرقام بدلاً من سلسلة
لا تنتمي إلى StackOverflow