EJB-QL вопрос, как бы я установить список в качестве параметра, как: выберите o из таблицы, где идентификатор в (List <Long>listOfIds) - PullRequest
1 голос
/ 02 ноября 2010

IN EJB-QL Я пытаюсь создать такой запрос:

SELECT * 

FROM table 

WHERE id IN ([id1],[id2],[id3],...);

Это обычный запрос для oracle или mysql, но как мне сделать, чтобы EJB-QL задавал параметры в виде списка?

SELECT o

FROM ClassName

WHERE ClassNameId IN (List<Long> listOfIds);

есть ли способ сделать это?

Что важнее, будет ли это эффективнее, чем выполнение отдельного запроса для каждого идентификатора в списке?

Любые предложения будут оценены.

Редактировать : Для ясности я пытаюсь выполнить один запрос, чтобы получить несколько строк на основе списка идентификаторов (не всей таблицы, не содержимого другой таблицы, а произвольного списка идентификаторов). , Я надеюсь, что смогу выполнить этот запрос один раз вместо обычного многократного поиска (один раз для каждого идентификатора в списке).

Спасибо

Джим

Ответы [ 2 ]

2 голосов
/ 15 ноября 2010
String queryStr = "select o from ClassName o where o.classNameId IN :ids";

Query query = entityManager.createQuery("queryStr");
List<Long> listOfIds = getIds();
query.setParameter("ids", listOfIds);

List<ClassName> classNameList = (List<ClassName>) query.getResultList();
0 голосов
/ 02 ноября 2010

Я не эксперт по EJB-QL.Вы можете найти примеры из здесь полезными.

SELECT OBJECT (o) FROM Order AS o IN (o.lineItems) li
WHERE li.quantity = ?1
...