Spring Boot 3.3.3
How to fix the issue?
@Transactional(readOnly = true)
public Map<Integer, QuotesCountersDto> loansWithQuotesCounters(LoansWithQuotesCountRequestParams params) {
companyService.checkCompanyExists(params.getCompanyId());
userService.checkUserHasValidCompany(params.getUserId(), params.getCompanyId());
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
var cq = cb.createTupleQuery();
Root<LoanEntity> loanRoot = cq.from(LoanEntity.class);
Join<LoanEntity, QuoteEntity> quoteJoin = loanRoot.join("quote", JoinType.INNER);
List<Predicate> predicates = getLoanNotExpiredCondition(cb, loanRoot, params);
cq.multiselect(loanRoot.get("loanId"), cb.count(quoteJoin.get("id")))
.where(predicates.toArray(new Predicate[0]))
.groupBy(loanRoot.get("loanId"), loanRoot.get("createdOn"))
.orderBy(params.isOlder() ? cb.desc(loanRoot.get("createdOn")) : cb.asc(loanRoot.get("createdOn")));
var query = entityManager.createQuery(cq);
query.setMaxResults(params.getLimit());
var result = query.getResultList();
Map<Integer, Long> loansWithAllQuotesCount = result.stream()
.collect(Collectors.toMap(
tuple -> tuple.get(0, Integer.class),
tuple -> tuple.get(1, Long.class)
));
Map<Integer, Long> loansWithUnreadQuotesCount = getLoansWithUnreadQuotesCount(loansWithAllQuotesCount.keySet(), params);
return loansWithAllQuotesCount.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey, e -> {
Long unreadQuotesCount = loansWithUnreadQuotesCount.get(e.getKey());
Long totalQuotesCount = e.getValue();
return QuotesCountersDto.builder()
.totalQuotesCount(Objects.nonNull(totalQuotesCount) ? totalQuotesCount : 0)
.unreadQuotesCount(Objects.nonNull(unreadQuotesCount) ? unreadQuotesCount : 0)
.build();
}
));
}