HQL 问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 16:56:31
小弟刚学Hibernate 语法现在都搞不清 崩溃了 帮忙看一下吧 谢谢了
我把主要出现问题的地方帖出来,如下:
bookstore.database.Userinfo user = (bookstore.database.Userinfo) session.getAttribute("user");
query= dbSession.createQuery("from Order as o where o.userinfo=:userinfo order by o.id desc");
query.setParameter("userinfo", user);
在这段代码中有几个地方不明白,
1.userinfo=:userinfo 这个是什么意思?
2.为什么去掉 userinfo=:userinfo 后 query.setParameter("userinfo", user);就会执行错误,错误信息如下:
org.apache.jasper.JasperException: could not locate named parameter [userinfo]
小弟在这里先谢谢了
麻烦帮忙解释一下

:userinfo 这个是HQL中提供参数的一种方法,它比直接使用“?”更能让人理解,如果使用?的话,在设置参数的就比较麻烦,要数一数你要设置的参数是第几个。使用":XX"这种模式的话在设置参数的值的时候 直接可以使用setParameter("userinfo", user); 而不是以前的setParameter(1, user); 数字的形式,避免了参数设置混乱、重复、或者缺失的问题。

1.userinfo=:userinfo 相当与userinfo=?
2.去掉 userinfo=:userinfo 这条语句就没有userinfo 占位符了,你还query.setParameter("userinfo", user),你要把user设给谁呢?所以会报错

1.相当于SQL语句 where userinfo='条件'

2.去掉 userinfo=:userinfo 语句没有userinfo 占位符;