gpt4 book ai didi

java - JPA 中的参数化查询出现 "org.hibernate.QueryException: Unable to resolve path..."错误

转载 作者:可可西里 更新时间:2023-11-01 07:47:10 26 4
gpt4 key购买 nike

我在参数化 SQL 查询的以下方法的第一个参数上遇到问题:

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

哪里:

String o1= "playa";
List<Object> lista;

“Idioma”表有 3 列“palabra”、“idioma”和“wordId”。该方法应在“palabra”列中查找单词“playa”并调用以下 Dao 方法:

@SuppressWarnings("unchecked")
public <T> List<T> find(String queryString, Object param, EntityManager em) {
Query query = em.createQuery(queryString);
query.setParameter( "param" , param);
return query.getResultList();
}

当我运行程序时,我“回滚”了:

Unable to resolve path [c.palabra], unexpected token [c] [SELECT c FROM com.aprendeidiomas.entity.Idioma WHERE c.palabra =:param]

我确定我的参数化 SQL 查询有问题。即使我有很多文件,我也无法解决我的错误。你能告诉我我的参数化查询有什么问题吗?

非常感谢您。

最佳答案

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

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

//Annotations and methods omitted for simplicity
class Idioma {
String palabra;
}

因此您的查询应该说明 cIdioma 的别名,即
SELECT c FROM Idioma c WHERE c.palabra =:param

一个简短的分解:

  • SELECT c - 选择 c
  • 的含义
  • FROM Idioma c - 选择 Idioma 实体并为它们指定别名 c 以便查询知道返回匹配的实体
  • WHERE c.palabra = :param - 此条件意味着所有具有作为 param 传递的值的实体(这是 o1 的值> 在您的示例中)匹配它们的 palabra 属性。

作为澄清:在 query.setParameter( "param", param); 之后,查询在内部可能如下所示:

SELECT c FROM Idioma c WHERE c.palabra = "playa"


边注:如果您想改为选择单词,请使用 SELECT c.palabra ...

关于java - JPA 中的参数化查询出现 "org.hibernate.QueryException: Unable to resolve path..."错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25547025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com