【发布时间】:2020-01-08 23:19:55
【问题描述】:
我最初的要求是获取汽车详细信息:
List<String> carMake = getUserCarMake();
Page<Car> carDetails = carRepository.findAllCarsInfo(carMake, pageRequest);
CarRepository.java
@Query(value="SELECT A FROM Cars A WHERE A.model = ?1
public Page<Cars> findAllCarsInfo(List<String> carMake, Pageable pageRequest);
现在我的要求已更改为为每个汽车制造商获取基于汽车详细信息的汽车型号。所以我改变了代码,如图所示
for (Cars car : userCars) {
String carMake = car.getCarMake();
List<String> carModelForMake = new ArrayList<>();
List <CarModels> carModelList = car.getCarModels();
for (CarModels carModel : carModelList) {
carModelForMake.add(carModel.getModelName());
Page<Car> carDetails = carRepository.findAllCarsInfo(carModelForMake, carMake, pageRequest)
}
}
CarRepository.java
@Query(value="SELECT A FROM Cars A WHERE A.model IN ?1 AND A.make = ?2”
public Page<Car> findAllCarsInfo(List<String> carModel, String carMake,Pageable pageRequest);
因此,对于每辆汽车,我都有一个 carMake 和相应的汽车模型,然后我将它们传递给查询以获取作为页面对象的 carDetails。因此,不同的 carMake 会多次调用相同的查询。 问题是我如何在这里管理 Page 对象。在上述场景中,Page 对象将仅包含 carModelList 中最后一辆车的详细信息,其余部分将被覆盖,因为我没有 与 List 一样,可以选择 carDetails.addAll()。
注意:我不能使用下面的查询,因为模型可能会在不同品牌之间重叠。
SELECT A FROM Cars A WHERE A.model IN ?1 AND A.make IN ?2
我的 pageRequest 的大小也为 (0, 20 )
我尝试修改查询以删除 pageRequest 并使用 findAll 来获取 List 中的结果,然后将它们转换为 PageObject 但这会破坏分页,因为 page.getContent() 具有整个结果集而不仅仅是 20 条记录.
Page<Car> carDetails = new PageImpl <>(carDetailsList, pageRequest, carDetailsList.size());
如何在此处有效地获取页面对象或合并不同的页面对象,以便我的分页像我之前的要求一样工作。
【问题讨论】:
-
问题不清楚。你能更好地解释一下你的需求吗?我理解你的代码,但我不明白你的要求。
标签: java spring-data-jpa jpa-2.0