Java &引用;org.hibernate.QueryException:无法解析路径…”;JPA上的参数化查询出错
以下参数化SQL查询方法的第一个参数出现问题: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的一个版本吧? 因此,您
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
-选择Idioma实体并给它们别名FROM Idioma c
,这样查询将知道返回匹配的实体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
。