使用hibernate执行HQL,有时候会报错:
java.lang.IllegalArgumentException: node to traverse cannot be null!
一般来说,这是由于使用hibernate 中的HQL做查询时出现了空返回值的错误,很有可能HQL语句本身就写错了,比如:
String Finder = new String("update set bean.test=bean.test+:value");
Query query = getSession().createQuery(Finder);
此处会报错,是因为HQL中没有说明数据表的名称,把名称加上:
String Finder = new String("update TestTable bean set bean.test=bean.test+:value");
Query query = getSession().createQuery(Finder);
就正确了。
还有一种情况就是在query接口创建引用的时候,本意是引用配置文件中的HQL语句却大意写成了创建,
<!--user.editpassword就是相当于queryName-->
<query name="user.editpassword">
UPDATE User SET password = ? WHERE id = ?
</query>
public void executeUpdate(String queryName, Object... objects) {
Session session = this.getSessionFactory().getCurrentSession();
正确:
Query query = session.getNamedQuery(queryName);
错误:
Query query = session.createQuery(queryName);
}