在JPA查询中使用GROUP BY / HAVING子句

霍尔顿

我有两个与父母/孩子一对多关系的班级:

父母:

@Entity 
@Table(name="RMS.COMMITMENT_REGISTER")
public class CommitmentRegister {

    @Id
    @Column(name="COMMIT_REG_ID")
    private int id;

    @OneToMany(fetch=FetchType.EAGER)
    @JoinColumn(name="COMMIT_REG_ID")
    private List<CommitmentRegisterDetail> details;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public List<CommitmentRegisterDetail> getDetails() {
        return details;
    }

    public void setDetails(List<CommitmentRegisterDetail> details) {
        this.details = details;
    }

}

和孩子:

@Entity 
@Table(name="RMS.COMMITMENT_REGISTER_DETAIL")
public class CommitmentRegisterDetail {

    @Id
    @Column(name="COMMIT_REG_DETAIL_ID")
    private int id;

    @Column(name="AMOUNT")
    private BigDecimal amount;

    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="COMMIT_REG_ID")
    private CommitmentRegister commitmentRegister;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public BigDecimal getAmount() {
        return amount;
    }

    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }

    public CommitmentRegister getCommitmentRegister() {
        return commitmentRegister;
    }

    public void setCommitmentRegister(CommitmentRegister parent) {
        this.commitmentRegister = parent;
    }

}

我想查询详细信息总和超过100的CR。我正在使用以下查询:

    StringBuffer sql = new StringBuffer();

    sql.append( " SELECT CR " );
    sql.append( " FROM CommitmentRegister CR " );
    sql.append( " LEFT JOIN CommitmentRegisterDetail CRD ON ( CRD.commitmentRegister = CR ) ");
    sql.append( " WHERE CR.id >= 91000 " );

    sql.append( " GROUP BY CR " );

    sql.append( " HAVING SUM( CRD.amount ) > 100 " );

    Query q = em.createQuery( sql.toString() );

    return q.getResultList();

但我收到以下错误:

Local Exception Stack: 
Exception [EclipseLink-6015] (Eclipse Persistence Services - 2.4.1.v20121003-ad44345): org.eclipse.persistence.exceptions.QueryException
Exception Description: Invalid query key [amount] in expression.
Query: ReportQuery(referenceClass=CommitmentRegister jpql=" SELECT CR  FROM CommitmentRegister CR  LEFT JOIN CommitmentRegisterDetail CRD ON ( CRD.commitmentRegister = CR )  WHERE CR.id >= 91000  GROUP BY CR  HAVING SUM( CRD.amount ) > 100 ")

在没有HAVING行的情况下,查询运行良好,并且将正确的详细信息分配给了父级(CR)。

提前致谢。

表结构(如果相关)

COMMITMENT_REGISTER
    COMMIT_REG_ID

COMMITMENT_REGISTER_DETAIL
    COMMIT_REG_DETAIL_ID
    COMMIT_REG_ID
    AMOUNT
迪恩·克拉克(Dean Clark)

我的猜测是,与联接相比,它要做的更多HAVING,因为它HAVING应按EclipseLink文档工作

也许尝试这样的事情,看看进展如何:

StringBuffer sql = new StringBuffer();

sql.append( " SELECT CR " );
sql.append( " FROM CommitmentRegisterDetail CRD " );
sql.append( " LEFT JOIN CRD.commitmentRegister CR ");
sql.append( " WHERE CR.id >= 91000 " );
sql.append( " GROUP BY CRD.commitmentRegister " );
sql.append( " HAVING SUM( CRD.amount ) > 100 " );

Query q = em.createQuery( sql.toString() );

return q.getResultList();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

原则-使用HAVING子句时计数COUNT行

来自分类Dev

您如何在子查询中使用group by / having子句?

来自分类Dev

在JPA条件查询的'having'子句中使用'case ... when ... then ... else ... end'构造

来自分类Dev

在JPA中使用GROUP BY子句时发生ClassCastException

来自分类Dev

在SQLAlchemy中的HAVING()子句中使用标签

来自分类Dev

MySQL Group by和Having子句问题

来自分类Dev

在WHERE子句中使用!=时,SELECT不起作用(使用GROUP BY和HAVING COUNT)

来自分类Dev

mysql查询中的having子句

来自分类Dev

允许在HAVING子句中使用别名的性能影响

来自分类Dev

实例化视图使用HAVING子句快速刷新?

来自分类Dev

SQL查询的HAVING子句只能使用聚合函数吗?

来自分类Dev

如何正确使用带有COUNT列的SQL HAVING子句?

来自分类Dev

无法在SQL中正确使用HAVING子句

来自分类Dev

在同一SQL查询中使用WHERE,HAVING和GROUP BY

来自分类Dev

在SQL查询中使用带有Union子句的group / order by

来自分类Dev

使用HAVING COUNT>子句查询

来自分类Dev

原则-使用HAVING子句时计数COUNT行

来自分类Dev

在JPA条件查询的'having'子句中使用'case ... when ... then ... else ... end'构造

来自分类Dev

无法删除带有GROUP BY和HAVING子句的语句

来自分类Dev

使用group by和having子句获取最大倍数行

来自分类Dev

如何在游标查询中使用group by子句?

来自分类Dev

在同一查询中使用Join,Group By,Having和Where子句

来自分类Dev

mysql查询中的having子句

来自分类Dev

奇怪的Having和Group By子句行为生成“'having'子句中的未知列”错误

来自分类Dev

带有 Where/Having 子句的 SQL 查询案例

来自分类Dev

SQL 查询不使用此 HAVING 子句返回任何内容

来自分类Dev

像这样使用 HAVING 子句是否正确?

来自分类Dev

在查询中组合 WHERE 和 HAVING 子句

来自分类Dev

在带有 WHERE 子句的 UPDATE 中使用 HAVING

Related 相关文章

  1. 1

    原则-使用HAVING子句时计数COUNT行

  2. 2

    您如何在子查询中使用group by / having子句?

  3. 3

    在JPA条件查询的'having'子句中使用'case ... when ... then ... else ... end'构造

  4. 4

    在JPA中使用GROUP BY子句时发生ClassCastException

  5. 5

    在SQLAlchemy中的HAVING()子句中使用标签

  6. 6

    MySQL Group by和Having子句问题

  7. 7

    在WHERE子句中使用!=时,SELECT不起作用(使用GROUP BY和HAVING COUNT)

  8. 8

    mysql查询中的having子句

  9. 9

    允许在HAVING子句中使用别名的性能影响

  10. 10

    实例化视图使用HAVING子句快速刷新?

  11. 11

    SQL查询的HAVING子句只能使用聚合函数吗?

  12. 12

    如何正确使用带有COUNT列的SQL HAVING子句?

  13. 13

    无法在SQL中正确使用HAVING子句

  14. 14

    在同一SQL查询中使用WHERE,HAVING和GROUP BY

  15. 15

    在SQL查询中使用带有Union子句的group / order by

  16. 16

    使用HAVING COUNT>子句查询

  17. 17

    原则-使用HAVING子句时计数COUNT行

  18. 18

    在JPA条件查询的'having'子句中使用'case ... when ... then ... else ... end'构造

  19. 19

    无法删除带有GROUP BY和HAVING子句的语句

  20. 20

    使用group by和having子句获取最大倍数行

  21. 21

    如何在游标查询中使用group by子句?

  22. 22

    在同一查询中使用Join,Group By,Having和Where子句

  23. 23

    mysql查询中的having子句

  24. 24

    奇怪的Having和Group By子句行为生成“'having'子句中的未知列”错误

  25. 25

    带有 Where/Having 子句的 SQL 查询案例

  26. 26

    SQL 查询不使用此 HAVING 子句返回任何内容

  27. 27

    像这样使用 HAVING 子句是否正确?

  28. 28

    在查询中组合 WHERE 和 HAVING 子句

  29. 29

    在带有 WHERE 子句的 UPDATE 中使用 HAVING

热门标签

归档