我有以下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
这个查询基本上用于分页。每个提取的between子句将具有不同的值。
现在我想使用JPA实现相同的查询。
我从一个SO问题中找到了以下参考文章:
但是在本文中,结果列表直接传递给view。但是,在我的情况下,我想将传输对象(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
上面的查询返回一个List。
如何用我的TO映射?我正在尝试
List<mySearchTO> myResult = new ArrayList<mySearchTO>();
myResult = myQuery.getResultList();
我的TO类是一个简单的类,有3个属性(aCol,bCol和cCol)以及getter和setter。
我得到的错误是
Exception thrown : java.lang.ClassCastException: [Ljava.lang.Object; incompatible with com.SummaryTO
但这是给予
答案 0 :(得分:0)
JPA通过Query.setFirstResult
和Query.setMaxResults
方法提供分页支持。我不知道它如何在SQL中用DB2进行转换,但它是在数据库中完成的(使用rownum与Oracle,限制与MySQL等)。
只需编写JPA查询,就像没有分页一样,并调用这两个方法,Hibernate将生成相应的SQL查询:
select s.aCol, s.bCol, s.cCol from MyEntity s
where s.cCol like :pattern
order by s.cCol asc