Я имею список идентификаторов в Строке и хочу использовать, в спящем режиме для получения строк с этими идентификаторами. 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
работа части?Спасибо.
Неправильный синтаксис вашего запроса 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 для привязки именованных параметров запроса