如何在Spring Data中使用@query anotation指定要返回的字段?

时间:2016-12-19 15:06:43

标签: spring-data-rest

当我在Spring Boot中使用@query anotation运行以下查询时,它会返回正确的结果:

SELECT p FROM Collection p WHERE LOWER(p.description) LIKE LOWER(CONCAT('%',:searchTerm, '%'))

{
    "_embedded": {
        "collections": [
            {
                "place": "Blessington",
                "description": "Collection of old shoes for recycling",
                "_links": {
                    "self": {
                        "href": "http://localhost:8080/collections/1"
                    },
                    "collection": {
                        "href": "http://localhost:8080/collections/1"
                    }
                }
            }
        ]
    },
    "_links": {
        "self": {
            "href": "http://localhost:8080/collections/search/findByDescription?searchTerm=shoe"
        }
    }
}

当我尝试指定要返回的字段时:

SELECT p.description FROM Collection p WHERE LOWER(p.description) LIKE LOWER(CONCAT('%',:searchTerm, '%'))

我收到以下错误:

{
    "cause": null,
    "message": "PersistentEntity must not be null!"
}

如何在Spring Data中使用@query注释指定要返回的字段?

2 个答案:

答案 0 :(得分:1)

是的,似乎Manish发布链接的问题有答案。

答案:你不能。

Spring数据将返回整个实体,而不是单个字段。你无法做到这一点。如果你想这样做,你必须使用投影。见链接帖子。

谢谢@Manish

答案 1 :(得分:0)

建议的链接并未完全涵盖所有可能性。

从Spring Data的Hopper版本中,可以直接从Query方法直接返回Projections:

https://spring.io/blog/2016/05/03/what-s-new-in-spring-data-hopper#projections-on-repository-query-methods

所以你可以这样做:

{{1}}