如何在列名称中使用下划线进行 JPQL 查询?
How do I do a JPQL query with an underscore in the column name?
我收到以下 JPQL 查询的错误:
@NamedQuery (name = "Customer.getById", query =
"SELECT o
FROM bub.Customer o
WHERE o.user_id = :myid")
[bub.Customer 是@实体名称]
这是我收到的错误消息的摘录:
org.hibernate.HibernateException:
Errors in named queries:
Customer.getById\n
Caused by: org.hibernate.HibernateException:
Errors in named queries: Customer.getById
当我删除 WHERE 子句时,Wildfly 允许我部署我的 Web 应用程序,因此我知道我的 WHERE 子句有问题。具体来说,因为我的客户 table 中的列名称是 user_id,我认为 JPQL 中的下划线 (_) 可能存在问题。我试过将 WHERE 子句更改为 "WHERE o.userId = :myid" 但这也不起作用。
如何修复 WHERE 子句,以便我的网站能够部署并仍然以正确的方式工作?
编辑:
相关方法是这样的:
public static Customer getById (final EntityManager em, final long id)
{
return em.createNamedQuery ("Customer.getById", Customer.class).setParameter ("myid", id).getSingleResult ();
}
不过我认为这不是问题所在。
编辑2:
事实证明这是问题所在:
@ManyToOne (fetch = FetchType.LAZY)
@JoinColumn (name = "user_id")
private User user;
我最终将 JPQL 查询更改为此,现在它正在运行:
@NamedQuery (name = "Customer.getById", query =
"SELECT o
FROM bub.Customer o
WHERE o.user = :myid")
在 JPQL 中,您不使用列名,而是使用属性名(除非您注释其他内容)
我收到以下 JPQL 查询的错误:
@NamedQuery (name = "Customer.getById", query =
"SELECT o
FROM bub.Customer o
WHERE o.user_id = :myid")
[bub.Customer 是@实体名称]
这是我收到的错误消息的摘录:
org.hibernate.HibernateException:
Errors in named queries:
Customer.getById\n
Caused by: org.hibernate.HibernateException:
Errors in named queries: Customer.getById
当我删除 WHERE 子句时,Wildfly 允许我部署我的 Web 应用程序,因此我知道我的 WHERE 子句有问题。具体来说,因为我的客户 table 中的列名称是 user_id,我认为 JPQL 中的下划线 (_) 可能存在问题。我试过将 WHERE 子句更改为 "WHERE o.userId = :myid" 但这也不起作用。
如何修复 WHERE 子句,以便我的网站能够部署并仍然以正确的方式工作?
编辑: 相关方法是这样的:
public static Customer getById (final EntityManager em, final long id)
{
return em.createNamedQuery ("Customer.getById", Customer.class).setParameter ("myid", id).getSingleResult ();
}
不过我认为这不是问题所在。
编辑2: 事实证明这是问题所在:
@ManyToOne (fetch = FetchType.LAZY)
@JoinColumn (name = "user_id")
private User user;
我最终将 JPQL 查询更改为此,现在它正在运行:
@NamedQuery (name = "Customer.getById", query =
"SELECT o
FROM bub.Customer o
WHERE o.user = :myid")
在 JPQL 中,您不使用列名,而是使用属性名(除非您注释其他内容)