【问题标题】:JPA @Query retrieving no resultsJPA @Query 没有检索到结果
【发布时间】:2018-11-12 06:13:50
【问题描述】:

所以我在 tbcaseaccount 中有一个我想按团队分组的数据列表。还没有团队的人(null)应标记为“未分配”。

我尝试先检索所有记录,因为无论如何使用此查询,所有记录对团队都有空值:

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

Tb团队

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

【问题讨论】:

  • 如何结束这个问题?

标签: sql-server spring-boot spring-data-jpa


【解决方案1】:

好的,我能够解决它。我只需要使用 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);

【讨论】:

    猜你喜欢
    • 2018-12-25
    • 2014-03-21
    • 2013-10-12
    • 2020-02-05
    • 1970-01-01
    • 2021-04-19
    • 2019-05-15
    • 1970-01-01
    • 2013-09-04
    相关资源
    最近更新 更多