首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring :添加分页后投影中断

问Spring :添加分页后投影中断
EN

Stack Overflow用户
提问于 2018-05-17 12:08:40
回答 1查看 1.5K关注 0票数 1

我有一个使用投影的查询,只要返回类型是List,它就能正常工作,但是它在添加分页后停止工作。

以下是工作代码:

代码语言:javascript
复制
@Query("SELECT DISTINCT \n" +
        "  new com.mycompany.dto.MyDto(me.property1, me.property2, ...) \n" +
        "FROM MyEntiry me...")
List<MyDto> findEntities();

我需要扩展它以添加分页,所以我将它更改为:

代码语言:javascript
复制
@Query("SELECT DISTINCT \n" +
        "  new com.mycompany.dto.MyDto(me.property1, me.property2, ...) \n" +
        "FROM MyEntiry me...")
Page<MyDto> findEntities(Pageable pageable);

一旦我这样做了,上下文就会失败,因为在解析时它会在SELECT和FROM语句之间插入FROM,以便查询成为无效的

代码语言:javascript
复制
SELECT DISTINCT 
  new com.mycompany.dto.MyDto(me.property1, me.property2, ...)  
select count(me) FROM com.mycompany.MyEntiry me ...

除以下例外情况外,上下文将失败:

原因: org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:选择靠近第3行,第1列选择不同的新com.mycompany.dto.MyDto(me.property1,me.property2,.)选择计数( me )从com.mycompany.MyEntiry me.在org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:91) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:291) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:186) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:141)在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:115) at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:77) at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153) at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:553) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:662) 88

问题:如何使它工作?是Spring数据错误吗?

注:

  • 我添加的查询过于简化,实际上我的实际查询从不同的表收集不同的值,没有投影就无法实现它
  • 我正在使用Spring 1.5.8。
EN

回答 1

Stack Overflow用户

发布于 2018-05-17 12:32:08

尝试使用“本机”Spring 预测。

这应能很好地运作:

代码语言:javascript
复制
public interface MyProjection {
    String getProperty1();
    //...
}

Page<MyProjection> getDistinctAllBy(Pageable pageable);

但是,如果您的查询连接了许多表,那么在使用分页时会遇到一些痛苦(例如:1、2)。

更新

尝试将参数countQuery添加到@Query注释中:

代码语言:javascript
复制
@Query(value = "select ...", countQuery = "select count(me) from MyEntiry me")
Page<MyDto> findEntities(Pageable pageable);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50391119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档