【问题标题】:How do I do a JPQL query with an underscore in the column name?如何在列名中使用下划线进行 JPQL 查询?
【发布时间】:2016-09-16 20:38:27
【问题描述】:

我收到以下 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 子句有问题。特别是由于列名是我的客户表中的 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")

【问题讨论】:

  • 也贴出实体的java代码
  • 我添加了调用查询的方法,但我认为这不是问题所在。除非我删除 WHERE 子句,否则我的代码现在不会部署,所以我认为 WHERE 子句是主要问题。
  • 我的意思是客户类。在 JPQL 中,您不使用列名,而是使用属性名(除非您注释其他内容)
  • 天哪,非常感谢图罗。如果您可以发布“在 JPQL 中您不使用列名,但使用属性名称(除非您注释其他内容)”作为答案,我会选择您的答案作为正确答案。非常感谢!!!!

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-04-07
    • 2018-02-01
    • 2010-11-17
    • 2022-12-08
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    相关资源
    最近更新 更多