【问题标题】:Spring Data JPA dynamic projection with PagingSpring Data JPA 动态投影与分页
【发布时间】:2017-09-24 13:11:00
【问题描述】:

我们有一个存储库,我们想在其中使用带有分页的动态投影:

@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 参数。切换参数顺序会导致相同的异常。

我们做错了吗?这还支持吗?

【问题讨论】:

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


【解决方案1】:

使用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);

【讨论】:

    【解决方案2】:

    另外,一位 Spring-Data-JPA 爱好者创建了一个项目,该项目使用规范实现投影。我在自己的项目中使用它没有问题。您可以从这里查看:

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

    【讨论】:

      猜你喜欢
      • 2018-10-27
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 2021-06-01
      • 2020-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多