弹簧启动 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));

如何使用弹簧启动 jpa 来请求这样的用户和最大分数?

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

或者有什么替代方案可以解决这类问题?

假设您有UserRepository

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)

与文档中的示例 18 类似。

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

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

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 类的相应路径。

下面的方法可以在存储库中编写,并用作 dao 层中的事务,可以从服务层访问。

@Query(value = "SELECT max(transactionId) FROM TransactionPayloadInfo")
int getMaxTransactionId();

创建一个数据模型。

public class Data {
 private int id;
  private int maxPoints;
 // getters and setters method  
 }

并像这样编写查询以获取数据模型。

 @Query(select packagename.Data(u.ID,max(p.points) ) from user u, points p where   u.id=p.user_id)
 Data findUserWithMaxVots();

相关内容

  • 没有找到相关文章

最新更新