【发布时间】:2018-01-18 14:35:36
【问题描述】:
很难弄清楚我是在遇到错误还是在做一些愚蠢的事情......
Spring Boot v2.0.0.M7、spring-data-jpa、spring-data-rest、MySQL
以下@Query
@Query("select DISTINCT item.statusCode from Item item")
public List<String> lookupStatusCodes();
PagingAndSortingRepository 正在抛出一个
java.lang.IllegalArgumentException: Couldn't find PersistentEntity for type class java.lang.String!
at org.springframework.data.mapping.context.PersistentEntities.lambda$getRequiredPersistentEntity$2(PersistentEntities.java:78) ~[spring-data-commons-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at java.util.Optional.orElseThrow(Unknown Source) ~[na:1.8.0_151]
at org.springframework.data.mapping.context.PersistentEntities.getRequiredPersistentEntity(PersistentEntities.java:77) ~[spring-data-commons-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.wrap(PersistentEntityResourceAssembler.java:72) ~[spring-data-rest-webmvc-3.0.2.RELEASE.jar:3.0.2.RELEASE]
statusCode 是一个 varchar,Item 本身可以像 @Entity 一样正常工作,但是尝试投影到字符串列表(或 List<Object>)会因上述原因而失败。
如果重要,我故意不想在这里返回Page<String>(不需要分页,因为预期的结果集很小)。
【问题讨论】:
-
你无法获取 List
你只能从 Repository 获取 List -
我不相信这是真的 - Spring Data 示例包括从存储库查询返回投影
-
没错。但是在您的问题或代码中,您没有提到与使用投影相关的任何内容。
-
我没有使用预测 - 我只是说 Repos 不限于返回 T 类型(这就是我阅读您的评论的方式)。请参阅下面我的评论,虽然投影也不起作用
-
@jameygraham 你发现了什么吗?我在 Spring 2 之前使用过它,它正在工作。我不能让它工作了(同样的例外:找不到 PersistenceEntity ...)。我在 [最新版本的文档] [docs.spring.io/spring-data/data-commons/docs/2.2.x/reference/… 中找不到任何示例当我调试 Spring 数据存储库代码时,它看起来不能再工作了(它在 AbstractMappingContext 的“persistentEntities”中查找映射,但只有实体的存储库在那里)。也许已经不可能了?
标签: spring-boot spring-data-jpa