如何在JPQL中删除作为实体名称的保留关键字 - Hibernate

Nic*_*Div 0 hibernate jpa jpql

我有一个简单的JOIN查询,我需要在Table_A和Order之间运行,但因为Order是保留的关键字,我收到以下错误:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: Order near line 1
Run Code Online (Sandbox Code Playgroud)

这是查询:

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();
Run Code Online (Sandbox Code Playgroud)

我已经解决了人们有类似困难的问题,但问题是列名称的问题,幸运的是有一个解决方法,但当关键字是实体名称时,我找不到解决方案.我不想因为这个障碍而改变班级名称,我想知道是否有人遇到过类似的问题,可以帮助我解决问题.

张贴类似问题的人还没有得到回答,请看这个链接: Similar Question

列名称出现问题的人通过执行以下操作解决了这个问题:

Question_1

问题2

Sim*_*lli 5

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

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

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

@Table(name = "TheOrder")
@Entity(name = "TheOrder")
public class Order
Run Code Online (Sandbox Code Playgroud)

但是现在你必须在你的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();
Run Code Online (Sandbox Code Playgroud)

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