Именованный запрос с JPA TREAT не работает из-за неожиданного узла AST - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь создать именованный запрос, который выдает ошибку.

" SELECT p FROM Project p  " +
" JOIN FETCH p.employees e " +
" WHERE p.id=:id AND ( TREAT(e AS FullTimeEmployee).code = :code OR e.state=:state)"

Класс проекта

public class Project {
    @Id
    @GeneratedValue
    private long id;
    private String code;
    @OneToMany(cascade = CascadeType.ALL)
    private List<Employee> employees;

Теперь класс Employee расширен за счет нескольких классов. Цель именованного запроса - получить один проект с отфильтрованными сотрудниками, которые имеют определенное состояние, или FullTimeEmployee с определенным кодом.

Ошибка:

<May 2, 2019 12:22:21,205 PM CEST> <Error> <org.hibernate.hql.internal.ast.ErrorCounter> <BEA-000000> <<AST>:1:127: unexpected AST node: (
<AST>:1:127: unexpected AST node: (
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4936)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.addrExprLhs(HqlSqlBaseWalker.java:5370)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4831)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1263)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4552)
        Truncated. see log file for complete stacktrace

1 Ответ

0 голосов
/ 02 мая 2019

Функция TREAT была введена в JPA 2.1.

Hibernate поддерживает JPA 2.1 с версии 4.3 или 5.0.

Таким образом, чтобы использовать TREAT, вы должны обновить Hibernate.

...