Порядок jpql по подзапросу приводит к неожиданному исключению узла AST - PullRequest
3 голосов
/ 05 апреля 2011

Я перевел рабочий (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";

Может кто-нибудь объяснить исключение, почему это происходит и как изменить запрос, чтобы избежать его,Спасибо!

1 Ответ

6 голосов
/ 05 апреля 2011

JPQL не поддерживает подзапросы в order by.Если я правильно понимаю ваш запрос, вы можете попробовать что-то вроде этого:

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