Java 如何在列名中使用下划线执行JPQL查询?
我在以下JPQL查询中遇到错误:Java 如何在列名中使用下划线执行JPQL查询?,java,postgresql,jakarta-ee,where-clause,jpql,Java,Postgresql,Jakarta Ee,Where Clause,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 b
@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子句有问题。特别是因为在我的Customer表中列名是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中,您不使用列名,而是使用属性名(除非您注释了其他内容)在发布实体的java代码后,tooI添加了调用查询的方法,但我认为这不是问题所在。我的代码现在不会部署,除非我删除WHERE子句,所以我认为WHERE子句是主要问题。我指的是客户类。在JPQL中,您不使用列名,而是使用属性名(除非您注释其他内容)。噢,我的天哪,非常感谢Turo。如果您可以将“在JPQL中不使用列名,而是使用属性名(除非您注释了其他内容)”作为答案,我将选择您的答案作为正确答案。非常感谢你!!!!