سؤال

أرغب في تحميل جميع الكائنات التي تحتوي على علامة نصية على أي عدد من القيم الصغيرة ولكن التعسفية من قاعدة البيانات الخاصة بنا. الطريقة المنطقية للذهاب إلى هذا في SQL هي بناء جملة "In". يسمح JPQL بـ In ، لكن يبدو أنه يتطلب مني تحديد كل معلمة واحدة مباشرة (كما في ، "في (: in1 ،: in2 ،: in3)").

هل هناك طريقة ما لتحديد صفيف ، أو قائمة (أو بعض الحاوية الأخرى) التي يجب إلغاؤها لقيم جملة في؟

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

المحلول

لست متأكدًا من JPA 1.0 ولكن يمكنك تمرير ملف Collection في JPA 2.0:

String qlString = "select item from Item item where item.name IN :names"; 
Query q = em.createQuery(qlString, Item.class);

List<String> names = Arrays.asList("foo", "bar");

q.setParameter("names", names);
List<Item> actual = q.getResultList();

assertNotNull(actual);
assertEquals(2, actual.size());

تم اختباره مع Eclipselink. مع Hibernate 3.5.1 ، ستحتاج إلى المحيط بالمعلمة مع قوسين:

String qlString = "select item from Item item where item.name IN (:names)";

ولكن هذا خطأ ، فإن استعلام JPQL في العينة السابقة صالحة JPQL. نرى HHH-5126.

نصائح أخرى

حد Oracle هو 1000 معلمة. تم حل المشكلة بواسطة السبات في الإصدار 4.1.7 على الرغم من تقسيم قائمة المعلمات التي تم تمريرها في مجموعات 500 انظر Jira HHH-1123

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