我的查询方法返回实体列表:
@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)
获取第一个元素。
有谁知道我应该如何更新我的查询方法以仅返回第一个结果?
答案 0 :(得分:1)
更新回答:
如果您不能使用派生查询,其中Spring Data JPA从方法名称派生查询,您可以使用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);
如果您不喜欢该名称,可以使用带有首选名称的默认方法并委托给我建议的名称。
如果您根本不想在界面中使用方法名称,则可以提供自定义实现。