Список как именованный параметр в использовании запроса JPA TopLink

Используя ROW_NUMBER на любом столбце от любого достаточно большая (стабильная) таблица была бы одним способом сделать это.

SELECT *
FROM (
  SELECT TOP 100 2003 + ROW_NUMBER() OVER (ORDER BY <AnyColumn>) AS Yr
  FROM dbo.<AnyTable>
  ) Years
WHERE Yr <= YEAR(GETDATE())

Примечание, которое <AnyTable> должно содержать, по крайней мере, сумму строк, равных на сумму лет, которых Вы требуете.

Редактирование (Cudo Joshua)

  • Предпочтительно, Вы выбрали бы таблицу, которую Вы знаете, не станет усеченным и/или удаленным. Достаточно большое system table должно прийти на ум.
  • В настоящее время, будучи намного старше и более мудрым (более старый, по крайней мере), я реализовал бы это требование с помощью CTE как упомянутый в ответе, данном Joshua. CTE техника намного выше и менее подвержена ошибкам, чем текущий, учитывая ROW_NUMBER решение.
6
задан Gilles 23 July 2009 в 07:46
поделиться

2 ответа

Toplink реализует JPA 1.0, который не поддерживает передачу списка в качестве параметра (collection_valued_input_parameter - это термин, используемый в документации). Это поддерживается в JPA 2.0, который реализован в преемнике TopLink, EclipseLink.

Если вам нужно придерживаться TopLink, вам нужно написать цикл для включения каждого элемента в список в качестве параметра.

4
ответ дан 17 December 2019 в 07:08
поделиться

I encountered a similar requirement, and succeeded when I changed query.setParameter("fcIds", fcIds) to setParameterList("fcIds", fcIds). The only difference was that I needed to make this change while using Hibernate (I'm not using TopLink), vs your case where you imply setParamter() seemed to be working with Hibernate.

0
ответ дан 17 December 2019 в 07:08
поделиться
Другие вопросы по тегам:

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