gpt4 book ai didi

spring - 使用可分页和排序从 Spring JPA 中的多个表中选择

转载 作者:行者123 更新时间:2023-12-04 11:51:24 24 4
gpt4 key购买 nike

我看到了 Selecting from Multiple Tables in Spring Data已经有多个表的解决方案。
我想知道是否可以在 Spring JPA/DATA 中同时编写具有可分页和排序功能的表的自定义查询。

SELECT s.service_id, s.name, us.rating_id 
FROM services s,
ratings r,
user_services us
where
us.service_id = s.service_id and
us.rating_id = r.rating_id and
us.user_id= ?
;

感谢您提前提供帮助。

最佳答案

排序功能有问题,但可以使用分页。

假设我们有:

@Entity
public class Service {

@Id
private Long id;

private String name;

//...
}

@Entity
public class UserService {

@Id
private Long id;

@ManyToOne
User user;

@ManyToOne
Service service;

@ManyToOne
Rating rating;

//...
}

然后我们创建一个投影:
public interface ServiceRating {
Long getServiceId();
String getServiceName();
Long getRatingId();
}

然后创建一个支持分页的查询方法:
public interface UserServiceRepo extends CrudRepository<UserService, Long> {
@Query("select s.id as serviceId, s.name as serviceName, us.rating.id as ratingId from UserService us join us.service s where us.user.id = ?1")
Page<ServiceRating> getServiceRating(Long userId, Pageable pageable);
}

(由于此查询不包含分组,因此没有必要使用额外的 countQuery(请参阅 @Query 的参数))。

测试:
Page<ServiceRating> pages = userServiceRepo.getServiceRating(1L, new PageRequest(0, 10));
assertThat(pages.getContent()).hasSize(10));

更新

排序也完美地工作。
只需创建一个 Sort 对象,指定方向和文件名(来自投影):
Sort sort = new Sort(Sort.Direction.ASC, "serviceName");
userServiceRepo.getServiceRating(1L, new PageRequest(0, 10, sort));

关于spring - 使用可分页和排序从 Spring JPA 中的多个表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45539358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com