如何转义保留关键字,它们是 JPQL 中的实体名称 - Hibernate
How to escape reserved keywords which are Entity names in 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();
我已经解决了人们遇到类似困难的问题,但所问的问题是列名问题,幸运的是,这些问题有解决方法,但是当关键字是实体名称时,我无法找到解决方案.由于这个障碍,我不想更改 class 名称,我想知道是否有人遇到过类似的问题并且可以帮助我解决我的问题。
发布类似问题的人尚未得到解答,请查看此link:
Similar Question
遇到列名问题的人已通过执行以下操作解决了这个问题:
Question_1
Question_2
您不能将 Order 用作实体名称,因为它是 JPQL 中的保留关键字。
如果您不想更改 class 的名称,您可以像这样更改实体名称,其中 "TheOrder" 是您要使用的名称。
并且您还需要更改 table 名称,因为 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();
我认为这会导致更多的混乱。所以最好改一下class.
的名字
我有一个简单的 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();
我已经解决了人们遇到类似困难的问题,但所问的问题是列名问题,幸运的是,这些问题有解决方法,但是当关键字是实体名称时,我无法找到解决方案.由于这个障碍,我不想更改 class 名称,我想知道是否有人遇到过类似的问题并且可以帮助我解决我的问题。
发布类似问题的人尚未得到解答,请查看此link: Similar Question
遇到列名问题的人已通过执行以下操作解决了这个问题:
Question_1
Question_2
您不能将 Order 用作实体名称,因为它是 JPQL 中的保留关键字。
如果您不想更改 class 的名称,您可以像这样更改实体名称,其中 "TheOrder" 是您要使用的名称。
并且您还需要更改 table 名称,因为 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();
我认为这会导致更多的混乱。所以最好改一下class.
的名字