如何在列名中使用下划线执行JPQL查询?

时间:2016-05-19 19:11:32

标签: java postgresql java-ee where-clause jpql

我收到以下JPQL查询错误:

@NamedQuery (name = "Customer.getById", query = 
"SELECT o 
FROM bub.Customer o 
WHERE o.user_id = :myid")

[bub.Customer是@Entity名称]

这是我收到的错误消息的摘录:

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

我不认为这是问题所在。

EDIT2: 事实证明这是问题所在:

@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")

1 个答案:

答案 0 :(得分:3)

在JPQL中,您不使用列名,而是使用属性名称(除非您注释其他内容)