我陷入了困境。我有一个查询,如下所示
@Query(value="SELECT bha.activity_code_id, ac.activity_code_full_name, pt.plan_name " +
" FROM bp_bid_history_activity bha, activity_code ac, plan_template pt where rownum < 201", nativeQuery = true)
List<Object[]> getContractReceivedAddedActivityCodes(@Param("bidId")Long bidId, @Param("historyId")Long historyId, Pageable pageable);
// Trying to achieve this
@Query(value="SELECT bha.activity_code_id, ac.activity_code_full_name, pt.plan_name " +
" FROM bp_bid_history_activity bha, activity_code ac, plan_template pt where rownum < 201", nativeQuery = true)
Page<Object[]> getContractReceivedAddedActivityCodesPageable(@Param("bidId")Long bidId, @Param("historyId")Long historyId, Pageable pageable);
实际上是为了查看结果,我将查询限制为200个结果。因为实际查询未返回结果。在实际查询中,有适当的where子句。但是无论如何。
这是我的使用方式
//@Test
public void getContractReceivedAddedActivityCodes() {
Long bidId = 178820L;
Long historyId = 783520L;
Pageable pageable = PageRequest.of(0, 10, Sort.by("activity_code_id"));
List<Object[]> addedActivitiesList = bpBidActivityRepository.getContractReceivedAddedActivityCodes(bidId, historyId, pageable);
List<ContractReceivedActivityCodesModel> addedActivityCodes = getContractReceivedActivityCodesModel(addedActivitiesList);
printList(addedActivityCodes);
}
private List<ContractReceivedActivityCodesModel> getContractReceivedActivityCodesModel(List<Object[]> activitiesList) {
List<ContractReceivedActivityCodesModel> activityCodes = null;
if (CollectionUtils.isNotEmpty(activitiesList)) {
activityCodes = activitiesList.stream()
.map(ContractReceivedActivityCodesModel::new).collect(Collectors.toList());
}
return activityCodes;
}
public class ContractReceivedActivityCodesModel {
private Long activeCodeId;
private String activityCodeFullName;
private String planName;
public ContractReceivedActivityCodesModel(Object[] object) {
if (ArrayUtils.isNotEmpty(object)) {
BigDecimal activeCodeId = (BigDecimal) object[0];
if (activeCodeId != null) {
this.activeCodeId = activeCodeId.longValue();
}
this.activityCodeFullName = (String) object[1];
this.planName = (String) object[2];
}
}
}
该查询将返回200个结果。现在的问题是,当List<Object[]>
查询运行时,我只得到10个结果。因为我要传递10页大小。但我也想获取总记录大小。因此,我可以在UI上显示分页,该分页显示200条记录中的10条,显示200条记录中的30条。
[当我们使用Page<Person>
或Page<T>
返回类型时,我们还将获得总数。在这种情况下,如何获得总数。或者我想得到类似Page<Object[]>
的东西。我尝试了Page<List<Object[]>>
,Page<Object[]>
之类的操作,但出现错误。
谢谢
您必须提供countQuery
@Query(value="SELECT bha.activity_code_id, ac.activity_code_full_name, pt.plan_name " +
" FROM bp_bid_history_activity bha, activity_code ac, plan_template pt where rownum < 201",
countQuery="SELECT count(*) " +
" FROM bp_bid_history_activity bha, activity_code ac, plan_template pt where rownum < 201"
nativeQuery = true)
Page<Object[]> getContractReceivedAddedActivityCodesPageable(@Param("bidId")Long bidId, @Param("historyId")Long historyId, Pageable pageable);