java - 无法使用 HQL 在 Hibernate 中获取结果集

标签 java hibernate hql

我正在使用 HQL 触发查询,通常它应该返回空结果集,因为它没有任何记录。但是,它会抛出

org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:106)

我的代码是

String hql = "FROM com.pck.Person where userId = " + userId;
Query query = session.createQuery(hql);         
@SuppressWarnings("unchecked")
List<Dashboard> listUserDetails = query.list(); <-- Problem here.

我预计列表大小为 0,因为没有传递任何记录 w.r.t userId。

我需要做哪些改变?

最佳答案

假设 userId 的值为“abc12”

根据您的代码,名为 hql 的字符串的值将变为: “来自 com.pck.Person,其中 userId = abc12”

如果您获取该字符串的值并尝试将其作为查询在任何数据库上运行,大多数人将无法理解 abc12 是一个字符串。通常它会被解释为一个变量。

正如其他用户提到的,包含单引号会产生所需的查询,但分配参数值的推荐方法是:

  String hql = "FROM com.pck.Person where userId = :id"
  query.setParameter("id", userId);

关于java - 无法使用 HQL 在 Hibernate 中获取结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36194389/

相关文章:

java - 为什么 Arrays.sort 采用 Object[] 而不是 Comparable[]?

java - 使用android中的添加按钮动态地将editTexts添加到布局

java - 如何在调试和 Release模式下从不同位置加载 Spring beans xml 配置

java - 为什么 getFirstResult() 和 getMaxResults() 不从数据库返回第 x 到 y 行的 block ?

java - Hibernate 对集合的查询过滤器

java - 如何使用java流高效地将Map转换为CSV?

java - 使用 Java 插入 SQL Server 数据库时出现问题

java - 如何使用子关联属性作为 JPA 父实体中的映射键

java - 像在 Hibernate 中一样选择

hibernate HQL : using JOIN to eagerly load child entities?