关于hibernate动态搜索的问题!!! 把ArrayList中的元素类型不要统一设成String,然后在根据传入的ArrayList中的元素的类型来判断使用setString还是setDate等等,这样不行吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 写一堆if 不就行了if( xxx instanceof String) pstmt.setString();if (xxx instanceof Date) pstmt.setDate();... to:zhenlau() 能举个例子说明一下吗???谢谢了!!aChinese(一个中国人) 你的方法确实可以解决问题,但是不是有点繁琐?如果这样的话,那我岂不是要把所有的类型都要IF到?那。。HB里有类似pstmt.setString(countI, temStr);这样一种方法搞定所有参数的类方法吗?你平常的动态综合搜索又是怎么做的呢??(比如说车辆系统,可以根据车牌号码,生产日期,购买费用,驾驶员来搜索所要的记录,有可能是一个条件,也有可能是几个条件综合。你在搜索的时候也是如你所说的吗?) 这么做无非是用运行效率换开发效率, 值得的话就换写一堆if 是麻烦, 反正也就麻烦一次. 综合搜索我是用sql做的, 只做查询,不会修改数据, 所以也不怕不能和hibernate同步. 一般用hibernate查询我也不用hql, 用Criteria, DetachedCriteria, 我觉得这才面向对象, 符合O/R映射的本意, 操作强类型的东西在编译期就可以避免出错.一般都这么写 DeteachedCriteria dcri = DeteachedCriteria.forClass(TB1.class); if( 车牌号码 != null || !"".equals(车牌号码)) dcri.add(Restrictions.eq("carNo",车牌号码); if( 生产日期1 != null || !"".equals(生产日期1)) dcri.add(Restrictions.le("brith",生产日期1); if( 生产日期2 != null || !"".equals(生产日期2)) dcri.add(Restrictions.ge("brith",生产日期2); ... 一大堆if 把条件都包含进去 然后执行 dcri.getExecutableCriteria(session) .list(); 你用setParameter阿,不需要类型判断。Query q=session.createQuery("from TB1 tb1 where tb1.item1=?,tb1.item2=?...")q.setParameter(0,"a");q.setParameter(1,new Integer(2));q.setParameter(2,"2006-6-6")............. 我不明白以上的大哥 都想什么利用JAVA反射 实现不行么 to: pigo 谢谢指教,你应该就是我想要的,但这种会不会在运行期发生强类型编译错误??确定可行吗?TO:javaRoot() JAVA反射??具体怎么做?能指教一二吗? spring对hibernate的封装就是这样写的,我的程序中已经使用了不知道多少次了:下面这段代码是spring里的 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); } java如何调用谷歌在线翻译,求源码 java如何打开.dbf的文件,把它的内容读到其他数据库 s2sh平台网站的自动登录问题(cookie) 加载驱动类,创建对象报错该咋改 Criteria的问题求救 帮我看看java导出excel错误 JSP出错 HTTP Status 500 - 关于Hibernate在Spring中的延时加载 怎么将这样的一个参数列表传入hibernate的query? 10000个号码要求不含4这个数字,怎么判断最快 请诸位高手帮我看一看,急。。。 Xfire问题。(想了一天半不知为什么错误,没时间仔细看User Guide)
if( xxx instanceof String)
pstmt.setString();
if (xxx instanceof Date)
pstmt.setDate();
...
能举个例子说明一下吗???谢谢了!!aChinese(一个中国人)
你的方法确实可以解决问题,但是不是有点繁琐?如果这样的话,那我岂不是要把所有的类型都要IF到?那。。
HB里有类似pstmt.setString(countI, temStr);这样一种方法搞定所有参数的类方法吗?你平常的动态综合搜索又是怎么做的呢??(比如说车辆系统,可以根据车牌号码,生产日期,购买费用,驾驶员来搜索所要的记录,有可能是一个条件,也有可能是几个条件综合。你在搜索的时候也是如你所说的吗?)
写一堆if 是麻烦, 反正也就麻烦一次. 综合搜索我是用sql做的, 只做查询,不会修改数据, 所以也不怕不能和hibernate同步.
一般都这么写
DeteachedCriteria dcri = DeteachedCriteria.forClass(TB1.class);
if( 车牌号码 != null || !"".equals(车牌号码))
dcri.add(Restrictions.eq("carNo",车牌号码);
if( 生产日期1 != null || !"".equals(生产日期1))
dcri.add(Restrictions.le("brith",生产日期1);
if( 生产日期2 != null || !"".equals(生产日期2))
dcri.add(Restrictions.ge("brith",生产日期2);
...
一大堆if 把条件都包含进去
然后执行
dcri.getExecutableCriteria(session)
.list();
你用setParameter阿,不需要类型判断。Query q=session.createQuery("from TB1 tb1 where tb1.item1=?,tb1.item2=?...")
q.setParameter(0,"a");
q.setParameter(1,new Integer(2));
q.setParameter(2,"2006-6-6")
.............
谢谢指教,你应该就是我想要的,但这种会不会在运行期发生强类型编译错误??确定可行吗?
TO:javaRoot()
JAVA反射??具体怎么做?能指教一二吗?
下面这段代码是spring里的
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);
}