首页 > 解决方案 > 如何转义作为 JPQL 中的实体名称的保留关键字 - Hibernate

问题描述

我有一个简单的 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

标签: hibernatejpajpql

解决方案


您不能使用 Order 作为实体名称,因为它是 JPQL 中的保留关键字。

如果您不想更改类的名称,您可以像这样更改实体名称,其中“TheOrder”将是您要使用的名称。

您还需要更改表名,因为 Order 也是 SQL 中的保留关键字。

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

但是现在您必须在 JPQL 查询中使用 TheOrder 而不是 Order:

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();

在我看来,这将导致更多的混乱。所以最好更改类的名称。


推荐阅读