(已编辑)将jpa结果列表映射到不同的TO

时间:2011-10-31 06:36:59

标签: sql hibernate jpa

我有以下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问题中找到了以下参考文章:

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

但是在本文中,结果列表直接传递给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

但这是给予

1 个答案:

答案 0 :(得分:0)

JPA通过Query.setFirstResultQuery.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