Итак, у меня есть список данных в tbcaseaccount, которые я хотел сгруппировать по командам. Те, у кого еще нет команды (ноль), должны быть помечены как «Не назначенные».
Сначала я попытался получить все, поскольку все записи имеют нулевые значения для команды, используя этот запрос:
@Query("SELECT new com.eteligent.form.delinquencyBucketForm('Unassigned'" +
"ELSE acct.team.teamName END, COUNT(acct)" +
"FROM TbCaseAccount acct " +
"WHERE acct.loan.ddlq >= :start AND acct.loan.ddlq <= :ends " +
"GROUP by acct.team")
List<delinquencyBucketForm> findByDdlqBetweenDdlqForm(@Param("start") long start, @Param("ends")long ends);
И успешно получили данные в следующем формате:
[{"team":"Unassigned","qty":8639,"totalunpaid":26754051.3400}]
Однако, когда я пытаюсь вставить условие case в запрос, я не получаю результатов, только пустую пару квадратных скобок:
@Query("SELECT new com.eteligent.form.delinquencyBucketForm(CASE WHEN acct.team.teamName IS NULL THEN 'Unassigned'" +
"ELSE acct.team.teamName END, COUNT(acct)" +
"FROM TbCaseAccount acct " +
"WHERE acct.loan.ddlq >= :start AND acct.loan.ddlq <= :ends " +
"GROUP by acct.team.teamName")
List<delinquencyBucketForm> findByDdlqBetweenDdlqForm(@Param("start") long start, @Param("ends")long ends);
TbCaseAccount
@OneToOne
@JoinColumn(name = "tbloans_id")
private Tbloans loan;
@ManyToOne
@JoinColumn(name = "team")
private TbTeam team;
TbTeam
@Column(name = "team_name", length = 30)
private String teamName;
делинквентностьBucketForm
public class delinquencyBucketForm {
String team;
long qty;
BigDecimal totalunpaid;
public delinquencyBucketForm(String team,long qty, Double totalunpaid) {
this.qty = qty;
this.totalunpaid = new BigDecimal(totalunpaid).setScale(4, BigDecimal.ROUND_HALF_UP);
this.team = team;
}
//getters and setters...





Хорошо, я смог это решить. Мне просто нужно было использовать LEFT JOIN, так как при просмотре преобразованного sql в журналах он использует перекрестные соединения в запросе. Вот мой обновленный запрос.
@Query("SELECT new com.eteligent.form.delinquencyBucketForm(CASE WHEN team.teamName IS NULL THEN 'Unassigned'" +
"ELSE team.teamName END, COUNT(acct)" +
"FROM TbCaseAccount acct LEFT JOIN acct.loan loan LEFT JOIN acct.team team" +
"WHERE acct.loan.ddlq >= :start AND acct.loan.ddlq <= :ends " +
"GROUP by team.teamName")
List<delinquencyBucketForm> findByDdlqBetweenDdlqForm(@Param("start") long start, @Param("ends")long ends);
Как закрыть этот вопрос?