Spring-boot jpa如何找到具有最大值的实体

新手上路,请多包涵

让我们告诉我有两张桌子。

 CREATE TABLE user (ID int AUTO_INCREMENT,PRIMARY KEY (ID));
CREATE TABLE points (ID int AUTO_INCREMENT, user_id int, points int,PRIMARY KEY (ID));

如何使用 spring-boot jpa 来请求这样的用户和最大点数?

 select u.ID,max(p.points) from user u, points p where u.id=p.user_id

或者有什么办法可以解决这类问题?

原文由 passer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

我通常创建一个类来保存结果,例如

public class Result {

private User user;
private int votes;
// getters and setters
}

并在存储库中编写自定义查询以获取数据

@Query(value = "SELECT new com.package.Result (u, MAX (p.points) )
FROM user u
JOIN points p
ON u.id = p.user_id
GROUP BY u")
List<Result> getPointsPerUser();

将 com.package.Result 替换为 Result 类的适当路径。

原文由 Sujit 发布,翻译遵循 CC BY-SA 4.0 许可协议

假设您有一个 RepositoryUser

 public class User {
    private int id;
    private List<Point> points;
    ...
}

Points 对象的关系:

 public class Point {
    private int id;
    private User User;
    private int points;
    ...
}

我还没有测试,但你应该能够做到:

 User findFirstByIdOrderByPointPointsDesc(int userId)

类似于 docs 中的示例 18

无论查询还是 Spring Data,您遇到的唯一问题是您是否有两个具有相同点值的用户。如果您需要更多关于平局的逻辑,那么编写 @Query (使用您的查询,加上额外的平局逻辑)或 @NativeQuery 可能更值得。

原文由 Dovmo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进