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

li9yvcax  于 12个月前  发布在  Spring
关注(0)|答案(4)|浏览(242)

我说我有两张table。

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来请求像这样的user和max积分?

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


或者有其他方法来解决这类问题吗?

unftdfkk

unftdfkk1#

假设你有一个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 Data,唯一的问题是如果你有两个用户具有相同的点值。如果你需要更多关于平局打破的逻辑,那么写一个@Query(带你的查询,加上额外的平局打破逻辑)或@NativeQuery可能更值得。

uqzxnwby

uqzxnwby2#

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

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类的适当路径。

rkttyhzu

rkttyhzu3#

下面的方法可以在Repo中编写,并在dao层中用作Transaction,可以从服务层访问。

@Query(value = "SELECT COALESCE(MAX(transactionId), 0) FROM TransactionPayloadInfo")
int getMaxTransactionId();

字符串

v1l68za4

v1l68za44#

创建数据模型。

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();

相关问题