Как найти с помощью JPQL, если значение члена находится в коллекции значений - PullRequest
0 голосов
/ 01 июля 2011

У меня есть объект, членом которого является перечисление, и я хочу написать запрос, возвращающий все элементы, для которых этот член находится в списке значений.Итак, я написал следующий запрос JQP

@NamedQuery(name = MyBean.FIND_BY_STATUSES, query = "select t from "+MyBean.TABLE+" t where t.status member of :statuses"),
class MyBean {
     @Enumerated(EnumType.STRING)
     private MyEnum status;
}

, который я пытаюсь использовать, используя следующий код EJB

    Query findByStatuses = getEntityManager().createNamedQuery(MyBean.FIND_BY_STATUSES);
    findByStatuses.setParameter("statuses", Arrays.asList(statuses));
    return findByStatuses.getResultList();

К сожалению, Glassfish бесконечно говорит мне, что я неправ (чтоЯ, очевидно).Но что я должен исправить?и как?

1 Ответ

0 голосов
/ 01 октября 2011

Сначала ваш запрос ссылается на имя таблицы, поэтому он пытается быть чем-то вроде SQL, но, возможно, в базе данных нет оператора «MEMBER OF», который подойдет для такого использования, поэтому давайте попробуем использовать JPQL. Там мы не можем использовать MEMBER OF, потому что он принимает выражение пути в качестве аргумента, а это не то, что мы предоставляем в setParameter. Вместо этого мы используем IN:

@NamedQuery(name = MyBean.FIND_BY_STATUSES, query = "select t from MyBean t where t.status in(:statuses)")

Нет необходимости изменять деталь, где вы запускаете запрос.

...