(отредактировано) Отображение списка результатов jpa в другое TO - PullRequest
2 голосов
/ 31 октября 2011

У меня ниже SQL-запрос:

SELECT * FROM (
  SELECT S.aCol, S.bCol, S.cCol, ROW_NUMBER() OVER (ORDER BY S.cCol ASC) AS R 
  FROM myTable S WHERE S.cCol LIKE 'abc%') AS TEMP 
WHERE R BETWEEN 0 AND 10 FOR FETCH ONLY

В основном этот запрос выполняет нумерацию страниц.Предложение промежуточное будет иметь разные значения для каждой выборки.

Теперь я хочу реализовать тот же запрос с использованием JPA.

Я нашел приведенную ниже справочную статью из одного вопроса SO:

http://weblogs.java.net/blog/2007/05/31/pagination-data-sets-sample-application-using-jsf-catalog-facade-stateless-session-a

Но в этой статье список результатов непосредственно передается для просмотра.Однако в моем случае я хочу установить результирующие столбцы в объекте переноса (mySearchTO) в качестве атрибутов.

Что-то вроде

mySearchTO.setBCol(resultSet.getString("B_COL"));
mySearchTO.setACol(resultSet.getString("A_COL")); 

в sql.

Как этого добиться с помощью JPA?Кроме того, как я могу написать основной запрос в JPA?

Я не могу использовать Criteria Builder, так как мне нужно запустить мое приложение на WSAD 6.1

Запрос, который я выполняю:

select s.aCol, s.bCol, s.cCol from MyEntity s  where s.cCol like 'abc' order by s.cCol asc

Над запросом возвращается список.

Как сопоставить его с моим TO ??Я пытаюсь

List<mySearchTO> myResult = new ArrayList<mySearchTO>();
myResult = myQuery.getResultList();

, где мой класс TO является простым классом с 3 свойствами (aCol, bCol и cCol) и геттерами и сеттерами.

Ошибка, которую я получаю:

Exception thrown : java.lang.ClassCastException: [Ljava.lang.Object; incompatible with com.SummaryTO

Но это дает

1 Ответ

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

JPA поддерживает пагинацию с помощью методов Query.setFirstResult и Query.setMaxResults. Я не знаю, как это переводится в SQL с DB2, но это делается в базе данных (используя rownum с Oracle, limit с MySQL и т. Д.)

Просто напишите свой запрос JPA, как если бы вы делали это без разбиения на страницы, и вызовите эти два метода, и Hibernate сгенерирует соответствующий запрос SQL:

select s.aCol, s.bCol, s.cCol from MyEntity s 
where s.cCol like :pattern 
order by s.cCol asc
...