Как исправить ошибку «неожиданный токен» в HQL Query - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь сделать этот оператор SQL:

select reimb_id, first_name, last_name, amount, type_id, description, 
             submitted, status_id, resolved
    from ers.reimbursement
    left join ers.users on author=user_id
    order by status_id
    limit 20;

на HQL. Это моя попытка:

String hql = "Select reimb_id, firstname, lastname, amount, type_id, " +
"description, submit_date, status_id, resolve_date " +
"from Reimb " +
"join Reimb.Users as data " +
"order by data.status_id desc";

Query q = session.createQuery(hql).setMaxResults(20);

Однако, когда я нажимаю эту инструкцию HQL, я получаю следующее исключение:

org.hibernate.QueryException: невозможно разрешить путь [data.status_id], неожиданный токен [данные] [Выберите reimb_id, имя, фамилию, сумму, type_id, описание, submit_date, status_id, resol_date from com.ers.pojos.Reimb присоединиться к Reimb.Users как порядок данных по data.status_id убывание]

Если я удаляю выражения данных, я получаю следующее исключение:

java.lang.IllegalStateException: нет типа данных для узла: org.hibernate.hql.internal.ast.tree.IdentNode + - [IDENT] IdentNode: 'firstname' {originalText = firstname}

Я использовал это, чтобы попытаться исправить это безрезультатно: https://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/queryhql.html

Вот мои соответствующие классы Java и переменные (по крайней мере, те, которые имеют отношение)

Мой класс Reimb Java:

@Entity
@Table(name = "reimbursement", schema = "ers")
public class Reimb {
    @Id
    @Column(name = "reimb_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int reimb_id;

    @Column(name = "amount")
    private double amount;

    @Column(name = "submitted")
    private Timestamp submit_date;

    @Column(name = "resolved")
    private Timestamp resolve_date;

    @Column(name = "description")
    private String description;

    @Column(name = "status_id")
    private int status_id;

    @Column(name = "type_id")
    private int type_id;

Java-класс My Users:

@Entity
@Table(name="users", schema = "ers")
public class Users {

    @Column(name = "FIRST_NAME")
    private String firstname;

    @Column(name = "LAST_NAME")
    private String lastname;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...