Как избежать зарезервированных ключевых слов, которые являются именами сущностей в JPQL - Hibernate - PullRequest
0 голосов
/ 13 июня 2018

У меня есть простой запрос JOIN, который мне нужно выполнить между Table_A и Order, но, поскольку Order является зарезервированным ключевым словом, я получаю следующую ошибку:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: Order near line 1

Вот запрос:

List<Tuple> list  = entityManager.createQuery(
                "select a " +
                        "from Table_A a " +
                        "join Order o on a.orderID = o.orderID " +
                        "where o.status = :status ", Tuple.class)
                .setParameter("status", "Completed")
                .getResultList();

Я прошел через вопросы, где люди сталкивались с аналогичными трудностями, но задаваемые вопросы касались имен столбцов, и, к счастью, у них был обходной путь, но когда ключевым словом было имя объекта, я не смог найти решение.Я не хочу менять имя класса из-за этого препятствия, и мне было интересно, если кто-то сталкивался с подобной проблемой и может помочь мне с моей проблемой.

Кто-то, кто разместил похожий вопрос, еще не получил ответ, перейдите по этой ссылке: Аналогичный вопрос

Люди, имеющие проблемы с именами столбцов, решили его, выполнив следующие действия:

Вопрос_1

Вопрос_2

1 Ответ

0 голосов
/ 13 июня 2018

Вы не можете использовать Order в качестве имени объекта, потому что это зарезервированное ключевое слово в JPQL.

Если вы не хотите изменять имя класса, вы можете изменить имя объекта следующим образом, где "TheOrder"будет именем, которое вы хотите использовать.

И вам также нужно изменить имя таблицы, потому что Order также является зарезервированным ключевым словом в SQL.

@Table(name = "TheOrder")
@Entity(name = "TheOrder")
public class Order

Но теперь вы должны использовать TheOrder вместо Order в ваших запросах JPQL:

List<Tuple> list  = entityManager.createQuery(
            "select a " +
                    "from Table_A a " +
                    "join TheOrder o on a.orderID = o.orderID " +
                    "where o.status = :status ", Tuple.class)
            .setParameter("status", "Completed")
            .getResultList();

На мой взгляд, это приведет к еще большей путанице.Так что лучше поменяй название класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...