使用Spring JPA规范和分页进行不同的列选择会导致InvalidDataAccessApiUsageException

时间:2019-05-28 19:15:16

标签: spring spring-boot jpa spring-data-jpa spring-data

我正在尝试根据使用Spring Data JPA规范接收到的一堆查询参数从表中过滤结果。我需要获取类型为UUID的Distinct Column的结果。我需要查询的所有其他查询参数的类型均为String

所以我尝试的存储库方法是findDistinctByTransactionId(Specficiation<T> spec, Pageable page)

我希望结果为Page<UUID>类型。但是我有一个例外。错误消息是:

org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [org.springframework.data.jpa.domain.Specifications@7c900524] did not match expected type [java.util.UUID (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [org.springframework.data.jpa.domain.Specifications@7c900524] did not match expected type [java.util.UUID (n/a)]

因此,这里的问题是让JPA知道我们正在寻找的Distinct Column的类型为UUID。

1 个答案:

答案 0 :(得分:0)

问题是您试图结合使用Spring Data JPA的两个独特功能:规范和查询派生。这是行不通的。

您应该做的是创建方法的custom method implementation,该方法使用JPA Criteria API构造查询,然后添加您作为参数传递的谓词。