HibernateTemplate.find()能实现组合查询么?

时间:2022-04-05 23:50:33
在HibernateTemplate.find()中的确可以动态查询,但貌似组合查询不行啊?
我在页面上给用户提供的查询条件有:工号,姓名,性别, 
              如果用户什么信息都不录入,便提交,hibernate就会不带条件进行查询所有的员工 
              如果用户只录入工号,hibernate就会带上条件(工号等于用户录入的信息)来进行查询 
              如果用户录入了工号和性别,hibernate将会带上两个条件(工号='' and 性别=‘’)来进行查询。
    public List find(final String queryString, final Object values[])
        throws DataAccessException
    {
        return (List)execute(new HibernateCallback() {

            public Object doInHibernate(Session session)
                throws HibernateException
            {
                Query queryObject = session.createQuery(queryString);
                prepareQuery(queryObject);
                if(values != null)
                {
                    for(int i = 0; i < values.length; i++)
                        queryObject.setParameter(i, values[i]);

                }
                return queryObject.list();
            }

        }
, true);
    }

如果使用该方法,是否是先根据页面提交内容中各个字段是不是为空,进而确定好HQL并且为values[]赋值,二者作为参数,再调用该方法?有没有更好的方法啊?
               注:使用的框架为spring+webwork+hibernate,刚学习hibernate不是很明白。

16 个解决方案

#1


我只能给你些建议。在写SQL语句的时候 用拼写查寻吧。。

#2


额。是HQL 应该是根据前台传的信息确定HQL语句。这个应该在HQL拼写的时候能做到 。

#3


是不是说,hibernate没有什么好的办法来实现动态查询,还是需要自己来做大量的判断。

#4


我也算楼上这意思,不过我更侧重组合查询的问题?

#5


飘过。。。

#6


引用 3 楼 AgileGuest 的回复:
是不是说,hibernate没有什么好的办法来实现动态查询,还是需要自己来做大量的判断。

是的,写情况都很复杂,且不固定,hibernate没有办法搞定所有情况

#7


find不是可以带一个数组么,查询条件按sql里出现顺序放到数组里去

#8


如果有的选项,提交的时候没填,那传过来的是NULL或“”,能放到数组里面?不会错?

#9


如果条件不是必要的,就别用find了吧

#10


可以用动态组建String来查询

#11


路过~

#12


Hibernate的Criteria接口是非常适合动态构造查询条件的,你可以这样来做
getHibernateTemplate.execute(new HibernateCallback() {
 public Object doInHibernate(Session session) throws HibernateException {
Criteria criteria = session.createCriteria(User.class);
if(employeeid != null) {
criteria.add(Restrictions.eq("employeeid", employeeid));
}
if(name !=null) {
criteria.add(Restrictions.eq("name", name));
}
                        if(sex != null) {
                                criteria.add(Restrictions.eq("sex", sex));
                        }
 }
});

这种方式是可以完成功能的,其中employeeid,name,sex都是方法的参数

#13


我知道楼上的方法,但感觉和拼HQL差不多,不知道有没有更好的方法?

#14


晕了,你用HQL还不把你给麻烦死...

#15


 if(name !=null) {
                criteria.add(Restrictions.eq("name", name));
            }

=

 if(name !=null) {
                hql+=“and name=“+name
            }
差不多!!

#16


晕,你自己看你写的有没有问题...hql可以这样写吗?

#1


我只能给你些建议。在写SQL语句的时候 用拼写查寻吧。。

#2


额。是HQL 应该是根据前台传的信息确定HQL语句。这个应该在HQL拼写的时候能做到 。

#3


是不是说,hibernate没有什么好的办法来实现动态查询,还是需要自己来做大量的判断。

#4


我也算楼上这意思,不过我更侧重组合查询的问题?

#5


飘过。。。

#6


引用 3 楼 AgileGuest 的回复:
是不是说,hibernate没有什么好的办法来实现动态查询,还是需要自己来做大量的判断。

是的,写情况都很复杂,且不固定,hibernate没有办法搞定所有情况

#7


find不是可以带一个数组么,查询条件按sql里出现顺序放到数组里去

#8


如果有的选项,提交的时候没填,那传过来的是NULL或“”,能放到数组里面?不会错?

#9


如果条件不是必要的,就别用find了吧

#10


可以用动态组建String来查询

#11


路过~

#12


Hibernate的Criteria接口是非常适合动态构造查询条件的,你可以这样来做
getHibernateTemplate.execute(new HibernateCallback() {
 public Object doInHibernate(Session session) throws HibernateException {
Criteria criteria = session.createCriteria(User.class);
if(employeeid != null) {
criteria.add(Restrictions.eq("employeeid", employeeid));
}
if(name !=null) {
criteria.add(Restrictions.eq("name", name));
}
                        if(sex != null) {
                                criteria.add(Restrictions.eq("sex", sex));
                        }
 }
});

这种方式是可以完成功能的,其中employeeid,name,sex都是方法的参数

#13


我知道楼上的方法,但感觉和拼HQL差不多,不知道有没有更好的方法?

#14


晕了,你用HQL还不把你给麻烦死...

#15


 if(name !=null) {
                criteria.add(Restrictions.eq("name", name));
            }

=

 if(name !=null) {
                hql+=“and name=“+name
            }
差不多!!

#16


晕,你自己看你写的有没有问题...hql可以这样写吗?