冒着巨大的风险,我试图合并使用一个本地查询,@SqlResultSetMapper +非实体POJO(MyDto),以及一个存储库方法,它将Pageable作为参数并返回Page。在克服了一些障碍之后,它几乎起作用了:
- 我的实体类名为
Order
,数据库表也是如此 - 我将查询结果Map到的DTO类是
MyDto
- 我的存储库被定义为
public interface MyRepository extends JpaRepository<Order, Long>
在我的存储库中,如果我用途:List<MyDto> findResults(Pageable page)
我得到1页结果列表;一切正常。
但是,如果我用途:Page<MyDto> findResults(Pageable page)
,发生了以下情况:
Error occurred while processing the request: org.springframework.dao.InvalidDataAccessApiUsageException:
org.hibernate.QueryException: unexpected char: '`' [select count(o) from `order` o ...
(the查询在“...”之后继续,并且其中的任何其他地方都没有反引号)
返回Page
会导致Hibernate生成一个无法解析的查询(但应该可以)
我认为不值得提供@NamedNativeQuery的东西,因为它可以工作,并且不会影响返回Page如何导致这个计数查询的生成。我倾向于认为这是一个Hibernate的bug,但我希望有一个解决方案。
我该怎么办?反引号是 * 必需的 ,因为order
是MySQL关键字,即使它们不是,我也不明白为什么它不能解析它(特别是*,因为它生成了它**)。
1条答案
按热度按时间dgiusagp1#
其实我想明白了通过从repository方法返回Page生成的count查询可以通过以下转换提供您自己的查询来避免:
转换这个:
对此:
注意,现在有一个
SqlResultSetMapping
和@NamedNativeQuery
用于count,还有一个自定义count查询,顺便说一下,它被定义为****因为即使有一个尾随空格,查询结果也是“select count(*)as cntfrom”。一只虫子
但现在一切正常!