如何在jpa中获取最后插入的行而不重复(特定于id)

时间:2017-05-16 10:14:42

标签: sql hibernate jpa spring-data-jpa

我正在研究jpa。我有一个要求是使用jpa获取最近5个最近插入的行,也没有重复

例如: 我有这样的表

例如:

id |userId| phnNum
---| ---- | -------
1  | 1    |  1234
2  | 1    |  3214
3  | 2    |  7899
4  | 3    |  6789
5  | 2    |  8899
6  | 4    |  6788
7  | 5    |  9874

现在我必须获取5条记录而不重复userId。

我试过这个

List<UserEntity> findFirst5ByOrderByIdDesc();

但它从数据库中提供的第一条记录不是最近的。我用Google搜索了jpa的最新记录。但是没有发现任何东西。 任何人都可以建议我如何解决这个问题。

提前致谢

2 个答案:

答案 0 :(得分:0)

我不认为你可以用方法名称来解决这个问题。 尝试显式查询:

@Query("select u from User u 
        where u.id IN (select max(uu.id) from User uu where uu.userId = u.userId) 
        order by u.id desc") 
List<UserEntity> findFirstNByOrderByIdDesc(Pageable pageable);

然后致电:

findFirstNByOrderByIdDesc(new PageRequest(0,5));

答案 1 :(得分:0)

我认为你正在寻找这个:

@Query("from UserEntity u group by u.userId order by u.id desc limit 5) List<UserEntity> findFirst5ByOrderByIdDesc();

或者您可以通过以下参数传递限制:

@Query("from UserEntity u group by u.userId order by u.id desc limit = :limit) List<UserEntity> findFirst5ByOrderByIdDesc(@Param("limit") Long limit);