子查询的jpql顺序产生意外的AST节点异常

max*_*xmc 3 hibernate jpql playframework

我将一个工作(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;
...
}
Run Code Online (Sandbox Code Playgroud)

这是我的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";
Run Code Online (Sandbox Code Playgroud)

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

axt*_*avt 6

JPQL不支持子查询order by.如果我正确理解您的查询,您可以尝试这样的事情:

select p 
from Piece p left join p.user.receivedVotes rv
group by p
order by count(rv) desc, p.index
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢,你的建议很好地调整了一下:我必须在group by子句中添加"p.id,p.user.id,p.index" (2认同)