Spring Data JPA动态投影与分页

时间:2017-09-24 13:11:00

标签: hibernate spring-data spring-data-jpa

我们有一个存储库,我们希望使用带分页的动态投影:

@Repository
public interface PersonRepository extends JpaRepository<Person, Long> {
    @Query("select p from Person p")
    <T> Page<T> dynamicInterfaceProjection(final Class<T> projectionClass, final Pageable pageable);
}

但是当我们调用它时,我们会得到以下异常:

Caused by: java.lang.IllegalArgumentException: Unknown parameter position: 1
    at org.hibernate.query.internal.QueryParameterBindingsImpl.getBinding(QueryParameterBindingsImpl.java:240) ~[hibernate-core-5.2.11.Final.jar:5.2.11.Final]
    at org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:503) ~[hibernate-core-5.2.11.Final.jar:5.2.11.Final]
    at org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:104) ~[hibernate-core-5.2.11.Final.jar:5.2.11.Final]
    at org.springframework.data.jpa.repository.query.ParameterBinder.bind(ParameterBinder.java:141) ~[spring-data-jpa-1.11.7.RELEASE.jar:na]
    at org.springframework.data.jpa.repository.query.StringQueryParameterBinder.bind(StringQueryParameterBinder.java:61) ~[spring-data-jpa-1.11.7.RELEASE.jar:na]
    at org.springframework.data.jpa.repository.query.ParameterBinder.bind(ParameterBinder.java:101) ~[spring-data-jpa-1.11.7.RELEASE.jar:na]

显然,Spring Data JPA无法识别第二个 Pageable 参数。切换参数顺序导致相同的异常。

我们做错了吗?这甚至支持吗?

2 个答案:

答案 0 :(得分:0)

使用findByIn这样的东西对我有用:

/**
 * @description -  gives dynamic projection  of the entity CarrotEntity,
 * based on the provided projection type.
 */

<T> Page<T> findByCarrotIdIn(Set<String> carrotIds, Class<T> type, Pageable pagable);

答案 1 :(得分:-1)

或者,Spring-Data-JPA Enthusiast创建了一个实现具有规范的投影的项目。我在我自己的项目中使用它没有问题。你可以从这里查看:

https://github.com/pramoth/specification-with-projection