hibernate对动态条件查询支持得最好的就是QBC查询
用Criteria做条件的动态植入
如果还是使用HQL的话
我建议你最好不要使用hibernate,还是使用JDBC比较好
因为拼接SQL就是我们使用JDBC最原始的一种思想
现在你又拼接HQL,那跟拼接SQL没多大区别
因为使用HQL证明你的软件思想还未达到面向对象,脑子里还大多数存在关系型数据库的概念。这样是学不好hibernate的
至少学不到真正ORM的精髓
给你发个我写的方法你好好看看,带分页,如果不要分页你自己去掉很简单的,看不明白再问我:
/**
*
* 方法说明:根据不同的条件查找客户发布的资讯
*
* @param hql 查询语句
* @param para
* 条件参数数组
* @param page 要显示的页
* @param pageSize 页面大小
* @return 创建人:潘卫平 日期:2009-5-23
*/
public List
final String[] para, int page, int pageSize) {
final int rsStart = (page - 1) * pageSize;
final int rsEnd = pageSize;
List list = (List) getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
for (int i = 0; i < para.length; i++) {
if (!para[i].equals(""))
query.setString(i, para[i]);
}
if (rsEnd != 0) {
query.setFirstResult(rsStart);
query.setMaxResults(rsEnd);
}
List list = query.list();
return list;
}
});
return list;
}
没个条件都放了String
比如“…… and”
在getHibernateTemplate().find(hql);之前
string.substring(0,string.length-3);