【问题标题】:jpql order by subquery produces unexpected AST node exceptionjpql order by subquery 产生意外的 AST 节点异常
【发布时间】:2011-07-29 22:00:49
【问题描述】:

我将一个工作的 (postgre)sql 查询翻译成 jpql,但是 hibernate 抛出了一个

org.hibernate.hql.ast.QuerySyntaxException: 意外的 AST 节点 异常

这些是我的核心模型类:

@Entity
public class Piece {
    @Id
    @GeneratedValue
    public Long id;

    @ManyToOne
    public AUser user;
    public long index;
...
}

@Entity
public class Vote {
    @Id
    @GeneratedValue
    public Long id;

    @ManyToOne
    public AUser receiver;
...
}

@Entity
public class AUser {
    @Id
    @GeneratedValue
    public Long id;

    @OneToMany(mappedBy="receiver", cascade=CascadeType.ALL)
    public List<Vote> receivedVotes;
...
}

这是我的 jpql 查询:

String query = "select p from Piece p order by (select count(v.receiver) from Vote v where v.receiver.id=p.user.id) desc, p.index";

任何人都可以解释异常,为什么会发生以及如何更改查询以避免它。谢谢!

【问题讨论】:

    标签: hibernate playframework jpql


    【解决方案1】:

    JPQL 不支持order by 中的子查询。如果我正确理解您的查询,您可以尝试以下方法:

    select p 
    from Piece p left join p.user.receivedVotes rv
    group by p
    order by count(rv) desc, p.index
    

    【讨论】:

    • 非常感谢,您的建议稍作调整后效果很好:我必须在 group by 子句中添加“p.id, p.user.id, p.index”
    猜你喜欢
    • 2020-05-02
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 2014-08-24
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多