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

时间:2016-03-24 06:28:20

标签: java hibernate hql

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

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已通过。

我需要做哪些更改?

2 个答案:

答案 0 :(得分:1)

让我们说userId的值是&#34; abc12&#34;

鉴于您的代码,名为hql的字符串的值将变为: &#34; FROM com.pck.Person,其中userId = abc12&#34;

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

正如其他用户提到的那样,包括单引号会产生所需的查询,但建议的分配参数值的方法是:

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

答案 1 :(得分:0)

看起来你缺少用户ID的单引号。

尝试使用"FROM com.pck.Person where userId = '" + userId + "'";

将命名参数与query.setParameter("userid", userId);

一起使用

如果没有解决,发布完整的堆栈跟踪会有所帮助。