Java &引用;org.hibernate.QueryException:无法解析路径…”;JPA上的参数化查询出错

Java &引用;org.hibernate.QueryException:无法解析路径…”;JPA上的参数化查询出错,java,mysql,sql,hibernate,jpa,Java,Mysql,Sql,Hibernate,Jpa,以下参数化SQL查询方法的第一个参数出现问题: lista = miDao.find("SELECT c FROM Idioma WHERE c.palabra =:param", o1 , entityManager); 其中: String o1= "playa"; List<Object> lista; 我确信我的参数化sql查询有问题。即使我有很多文件,我也不能解决我的错误。你能告诉我我的参数化查询有什么问题吗 非常感谢您。我想c应该是Idioma的一个版本吧? 因此,您

以下参数化SQL查询方法的第一个参数出现问题:

lista = miDao.find("SELECT c FROM Idioma WHERE c.palabra =:param", o1 , entityManager);
其中:

String o1= "playa";
List<Object> lista;
我确信我的参数化sql查询有问题。即使我有很多文件,我也不能解决我的错误。你能告诉我我的参数化查询有什么问题吗


非常感谢您。

我想
c
应该是
Idioma
的一个版本吧? 因此,您必须将别名添加到您的州:

lista = miDao.find("SELECT c FROM Idioma c WHERE c.palabra =:param", o1 , entityManager);

首先,您使用的不是SQL而是JPQL(或作为扩展的HQL)

接下来,错误消息已经告诉您出了什么问题:
c
未知,因此无法解析
c.palabra
。我假设您的意思是选择与
param
中的单词匹配的所有惯用语,您的
Idioma
实体如下所示:

//Annotations and methods omitted for simplicity
class Idioma {
   String palabra; 
}
SELECT c FROM Idioma c WHERE c.palabra = "playa"
因此,您的查询应该声明
c
Idioma
的别名,即
从惯用c中选择c,其中c.palabra=:param

简短的细分:

  • SELECT c
    -选择
    c
  • FROM Idioma c
    -选择Idioma实体并给它们别名
    c
    ,这样查询将知道返回匹配的实体
  • 其中c.palabra=:param
    -此条件意味着具有作为
    param
    传递的值的所有实体(在您的示例中为
    o1
    的值)与其
    palabra
    属性匹配
作为澄清:在
query.setParameter(“param”,param)之后内部查询可能如下所示:

//Annotations and methods omitted for simplicity
class Idioma {
   String palabra; 
}
SELECT c FROM Idioma c WHERE c.palabra = "playa"

旁注:
如果您想改为选择单词,请使用
select c.palabra…

什么是
c
?您的意思是
从惯用语c中选择c…
?“c”是我要替换为“playa”的参数否,参数将是
参数
。谢谢您的回答,但添加别名是什么意思?注意:设置参数实例后的“c”应该是“playa”。您描述了什么类型的对象是c?请在您的问题中添加条目!你是对的!直到现在我才明白你添加别名的意思。“c”是“Idioma”的一个实例。旁注:您的意思是“从Idioma c=:param中选择c.palabra”?@VictorDoors no
从Idioma c中选择c.palabra,其中c.palabra=:param
非常感谢您的回答和您的患者。现在一切都清楚了:)这只是与此相关的最后一个问题。考虑到palabra是我的表的一列,检索我的表的所有“palabra”条目的命令是什么?我想知道的是,如果使用JPQL/HQL,您不应该考虑表和列,而应该考虑实体和属性。其次,您应该考虑
其中c.palabra=“
的含义:“返回属性
palabra
为空字符串的所有实体”->显然不是您想要的。只需尝试不使用where子句来获取所有实体:
从Idioma c中选择c.palabra