我使用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已通过。
我需要做哪些更改?
答案 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);
如果没有解决,发布完整的堆栈跟踪会有所帮助。