Mysql 如何在Spring JpaRepository中使用自定义DTO进行分页响应

Mysql 如何在Spring JpaRepository中使用自定义DTO进行分页响应,mysql,spring-boot,jpa,spring-data-jpa,spring-repositories,Mysql,Spring Boot,Jpa,Spring Data Jpa,Spring Repositories,我想编写一个Spring数据JPA查询,用于在自定义DTO类中获取可分页响应。但我有个例外。下面是存储库中的代码 @Query("SELECT new com.xxx.xxx.dto.corporate.RentOrRideDetails(c.corpRideId, " + "c.corporateRidePackage.corporate.corporateName, c.timeStamp, c.pickLongitude, c.pickLatitude, " +

我想编写一个Spring数据JPA查询,用于在自定义DTO类中获取可分页响应。但我有个例外。下面是存储库中的代码

@Query("SELECT new com.xxx.xxx.dto.corporate.RentOrRideDetails(c.corpRideId, " +
        "c.corporateRidePackage.corporate.corporateName, c.timeStamp, c.pickLongitude, c.pickLatitude, " +
        "c.pickupStreet, c.pickupDateTime, c.dropLongitude, c.dropLatitude, c.dropDateTime, c.dropStreet," +
        "c.calculatedDistance, c.actualDistance, c.rideStatus, c.corporateRidePayment.paymentType)" +
        "FROM CorporateRide c")
Page<RentOrRideDetails> getAllRidesWithCustomDetails(Pageable pageable);
@Query(“选择new com.xxx.xxx.dto.corporate.RentOrRideDetails(c.corpRideId,”+
c.CorporateDepackage.corporate.corporateName,c.timeStamp,c.Pick经度,c.pickLatitude+
“c.pickupStreet,c.pickupDateTime,c.dropLongitude,c.dropLatitude,c.dropDateTime,c.dropStreet,”+
“c.计算距离,c.实际距离,c.行驶状态,c.公司付款.付款类型”+
“来自c公司”)
Page GetAllRides with CustomDetails(可分页);
当我将返回类型从页面替换为列表时,这是有效的 但我需要一个可分页的回复

例外情况

Caused by: java.lang.IllegalArgumentException: Count query validation failed for method public abstract org.springframework.data.domain.Page com.ceyentra.liontours.repository.corporate.ride.CorporateRideRepository.getAllRidesWithCustomDetails(org.springframework.data.domain.Pageable)!
at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:93) ~


Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: select near line 1, column 360 [SELECT new com.xxx.xxx.dto.corporate.RentOrRideDetails(c.corpRideId, c.corporateRidePackage.corporate.corporateName, c.timeStamp, c.pickLongitude, c.pickLatitude, c.pickupStreet, c.pickupDateTime, c.dropLongitude, c.dropLatitude, c.dropDateTime, c.dropStreet,c.calculatedDistance, c.actualDistance, c.rideStatus, c.corporateRidePayment.paymentType)select count(c) FROM com.ceyentra.liontours.entity.corporate.ride.CorporateRide c]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:138) ~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) ~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188) ~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:718) ~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23) ~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_144]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_144]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_144]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_144]
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:350) ~[spring-orm-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at com.sun.proxy.$Proxy112.createQuery(Unknown Source) ~[na:na]
at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:87) ~[spring-data-jpa-2.1.10.RELEASE.jar:2.1.10.RELEASE]
... 71 common frames omitted

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: select near line 1, column 360 [SELECT new com.xxx.xxx.dto.corporate.RentOrRideDetails(c.corpRideId, c.corporateRidePackage.corporate.corporateName, c.timeStamp, c.pickLongitude, c.pickLatitude, c.pickupStreet, c.pickupDateTime, c.dropLongitude, c.dropLatitude, c.dropDateTime, c.dropStreet,c.calculatedDistance, c.actualDistance, c.rideStatus, c.corporateRidePayment.paymentType)select count(c) FROM com.ceyentra.liontours.entity.corporate.ride.CorporateRide c]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) ~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
at org.hibernate.hql.internal.ast.ErrorTracker.throwQueryException(ErrorTracker.java:93) ~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:297) ~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:189) ~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144) ~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:113) ~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:73) ~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:155) ~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:600) ~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:709) ~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
... 79 common frames omitted
原因:java.lang.IllegalArgumentException:Count方法公共抽象org.springframework.data.domain.Page com.ceyentra.liontours.repository.corporate.ride.CorporateRideRepository.getAllRidesWithCustomDetails(org.springframework.data.domain.Pageable)的查询验证失败!
位于org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:93)~
原因:java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:意外标记:在第1行第360列附近选择[选择新com.xxx.xxx.dto.corporate.RentOrRideDetails](c.corpRideId,c.CorporateDepackage.corporate.corporateName,c.timeStamp,c.Pick经度,c.pickLatitude,c.pickupStreet,c.pickupDateTime,c.dropDateTime,c.dropStreet,c.calculatedDistance,c.ActualInstance,c.rideStatus,c.CorporateDepayment.paymentType)选择计数(c)来自com.ceyentra.liontours.entity.corporate.ride.CorporateRide c]
在org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:138)~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
在org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
在org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
在org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:718)~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
在org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23)~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)~[na:1.8.0_144]
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[na:1.8.0144]
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0144]
在java.lang.reflect.Method.invoke(Method.java:498)~[na:1.8.0_144]
在org.springframework.orm.jpa.ExtendedEntityManagerCreator$extendedentitymanageringhandler.invoke(ExtendedEntityManagerCreator.java:350)~[spring-orm-5.1.9.RELEASE.jar:5.1.9.RELEASE]
在com.sun.proxy.$Proxy112.createQuery(未知源)~[na:na]
在org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:87)~[spring-data-jpa-2.1.10.RELEASE.jar:2.1.10.RELEASE]
…省略了71个公共帧
原因:org.hibernate.hql.internal.ast.QuerySyntaxException:意外标记:在第1行第360列附近选择[选择新com.xxx.xxx.dto.corporate.RentOrRideDetails](c.corpRideId,c.CorporateDepackage.corporate.corporateName,c.timeStamp,c.Pick经度,c.pickLatitude,c.pickupStreet,c.pickupDateTime,c.dropDateTime,c.dropStreet,c.calculatedDistance,c.ActualInstance,c.rideStatus,c.CorporateDepayment.paymentType)选择计数(c)来自com.ceyentra.liontours.entity.corporate.ride.CorporateRide c]
在org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74)~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
在org.hibernate.hql.internal.ast.ErrorTracker.throwQueryException(ErrorTracker.java:93)~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
在org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:297)~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
在org.hibernate.hql.internal.ast.QueryTranslatorImpl.docomfile(QueryTranslatorImpl.java:189)~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
在org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144)~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:113)~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:73)~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
在org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:155)~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
在org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:600)~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
在org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:709)~[hibernate-core-5.4.5.Final.jar:5.4.5.Final]
…省略了79个公共帧

您可以使用CriteriaBuilder手动分页并返回列表,而不是页面

您需要编写countQuery以支持分页。例如-@Query(value=“您的选择查询”,countQuery=“您的计数查询”)