我的查询方法返回实体列表:
@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)
获取第一个元素。
有人知道如何更新我的查询方法以只返回第一个结果吗?
发布于 2017-12-13 07:04:47
最新答案:
如果不能使用派生查询,其中Spring从方法名称派生查询,则可以使用Pageable
参数限制结果,并使用另一个具有默认实现的方法隐藏参数并打开结果:
@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
注释并将您的方法更改为:
UserPrincipalDMO findFirstByUserPrincipalProfileId(@Param("profileId") long profileId);
如果您不喜欢这个名称,您可以使用默认方法,并将您的首选名称委托给我建议的名称。
如果您根本不想在接口中使用方法名,则可以提供自定义实现。
https://stackoverflow.com/questions/47776620
复制相似问题