首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring数据JPA:使用查询方法上的@Query注释获取第一条记录

Spring数据JPA:使用查询方法上的@Query注释获取第一条记录
EN

Stack Overflow用户
提问于 2017-12-12 15:54:10
回答 1查看 6.5K关注 0票数 3

我的查询方法返回实体列表:

代码语言:javascript
运行
复制
@Query("select u from ProfileDMO p inner join p.userPrincipal u where p.id=:profileId")
    List<UserPrincipalDMO> findUserPrincipalByProfileId(@Param("profileId") long profileId);

我只需要第一个结果。目前,我正在使用List.get(int index)获取第一个元素。

有人知道如何更新我的查询方法以只返回第一个结果吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-13 07:04:47

最新答案:

如果不能使用派生查询,其中Spring从方法名称派生查询,则可以使用Pageable参数限制结果,并使用另一个具有默认实现的方法隐藏参数并打开结果:

代码语言:javascript
运行
复制
@Query("select u from ProfileDMO p inner join p.userPrincipal u where p.id=:profileId")
List<UserPrincipalDMO> internalFindUserPrincipalByProfileId(@Param("profileId") long profileId, Pageable page);

default UserPrincipalDMO findUserPrincipalByProfileId(long profileId){
    return internalFindUserPrincipalByProfileId(
        profileId, 
        PageRequest.of(0,1)
    ).get(0);
};

当然,这使得API中的内部实现(如果您不喜欢的话)始终可以回到自定义实现中。

原始答案:

您应该能够使用查询派生,即删除@Query注释并将您的方法更改为:

代码语言:javascript
运行
复制
UserPrincipalDMO findFirstByUserPrincipalProfileId(@Param("profileId") long profileId);

如果您不喜欢这个名称,您可以使用默认方法,并将您的首选名称委托给我建议的名称。

如果您根本不想在接口中使用方法名,则可以提供自定义实现。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47776620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档