我们有一个存储库,我们希望使用带分页的动态投影:
@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 参数。切换参数顺序导致相同的异常。
我们做错了吗?这甚至支持吗?
答案 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创建了一个实现具有规范的投影的项目。我在我自己的项目中使用它没有问题。你可以从这里查看: