JPA @Query не получает результатов - PullRequest
0 голосов
/ 02 июня 2018

Итак, у меня есть список данных в 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}]

Однако, когда я пытаюсь вставить условие запроса в запрос, я не получаю никаких результатов, только пустая пара квадратных скобок:

@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;

delinquencyBucketForm

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...

1 Ответ

0 голосов
/ 02 июня 2018

Хорошо, я смог решить это.Мне просто нужно было использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...