Выполнение “В” запросе с В спящем режиме

Я имею список идентификаторов в Строке и хочу использовать, в спящем режиме для получения строк с этими идентификаторами. TrackedItem объект Hibernate/JPA (извините, если я перепутывал именование здесь).

Мой код:

String idsText = "380, 382, 386";
ArrayList<Long> ids = new ArrayList<Long>();

for (String i : idsText.split(","))
{
    ids.add(Long.getLong(i));
}

List<TrackedItem> items = TrackedItem.find("id IN (?)", ids).fetch();

Но это перестало работать: JPAQueryException occured : Error while executing query from models.TrackedItem where id IN (?): java.util.ArrayList cannot be cast to java.lang.Long

Как я могу сделать IN работа части?Спасибо.

33
задан Pascal Thivent 27 June 2010 в 04:33
поделиться

1 ответ

Неправильный синтаксис вашего запроса JPQL. Либо используйте (с позиционным параметром):

List<Long> ids = Arrays.asList(380L, 382L, 386L);
Query query = em.createQuery("FROM TrackedItem item WHERE item.id IN (?1)");
query.setParameterList(1, ids)
List<TrackedItem> items = query.getResultList();

Или (с именованным параметром):

List<Long> ids = Arrays.asList(380L, 382L, 386L);
Query query = em.createQuery("FROM TrackedItem item WHERE item.id IN :ids");
query.setParameterList("ids", ids)
List<TrackedItem> items = query.getResultList();

Ниже соответствующие разделы спецификации JPA 1.0 о параметрах:

4.6.4.1 Позиционные параметры

Следующие правила применяются к позиционным параметрам.

  • Входные параметры обозначаются префиксом вопросительного знака (?), За которым следует целое число. Например: ? 1 .
  • Входные параметры нумеруются, начиная с 1.
    Обратите внимание, что один и тот же параметр может использоваться более одного раза в строке запроса и что порядок использования параметров в строке запроса не обязательно должен соответствовать порядку позиционные параметры.

4.6.4.2 Именованные параметры

Именованный параметр - это идентификатор, которому предшествует символ «:». Он следует правилам для идентификаторов, определенным в разделе 4.4.1. Именованные параметры чувствительны к регистру.

Пример:

 ВЫБРАТЬ c
ОТ Заказчика c
ГДЕ c.status =: stat

Раздел 3.6.1 описывает API для привязки именованных параметров запроса

63
ответ дан 27 November 2019 в 17:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: