浏览 11648 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-04-13
看了Hibernate3.0.5中带的单元测试代码,DetachedCriteria是支持排序的,这是咋回事呢,不知哪位用过DetachedCriteria的排序吗? 下面是我在DetachedCriteria实现分页中加入的一段排序代码,大家给看看什么地方有问题: public PaginationSupport findPageByCriteria( final DetachedCriteria detachedCriteria, final Order order, final int pageSize, final int startIndex) { return (PaginationSupport) getHibernateTemplate().execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Criteria criteria = detachedCriteria.getExecutableCriteria(session); int totalCount = ((Integer) criteria.setProjection( Projections.rowCount()).uniqueResult()) .intValue(); criteria.addOrder(order); criteria.setProjection(null); List items = criteria.setFirstResult(startIndex) .setMaxResults(pageSize).list(); PaginationSupport ps = new PaginationSupport(items, totalCount, pageSize, startIndex); return ps; } }, true); } 上面代码中若去掉:criteria.addOrder(order);这行,可以查询出分页信息,但加入这个排序后就出错了。 下面是执行后报的错误: Hibernate: select count(*) as y0_ from users this_ Hibernate: select * from ( select row_.*, rownum rownum_ from ( select this_.id as id0_, this_.username as username0_0_, this_.password as password0_0_, this_.age as age0_0_, this_.sex as sex0_0_ from users this_ order by this_.id asc ) row_ ) where rownum_ <= ? and rownum_ > ? - SQL Error: 907, SQLState: 42000 - ORA-00907: 缺少右括号 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-04-16
你自己写错了
这样用 XXX.addOrder(Order.desc(YYY.PROP_ID)); |
|
返回顶楼 | |
发表时间:2006-04-16
跟目标数据库有关 我遇到过 oracle没问题 sql server 和mysql会报错。
关键就是在查询查询总数的时候会出错 其实可以在取道count以后在设置order属性就可以了。 sorry看错了:) criteria.addOrder(order);; criteria.setProjection(null);; 上面两句换成 criteria.setProjection(null);; criteria.addOrder(order);; 试试 我用了 mysql 和oracle都可以 如果是oracle的话 其实可以在DetachedCriteria后面直接加上oracle 了 |
|
返回顶楼 | |
发表时间:2006-04-17
To:xmvigour
按照你说的: java代码: criteria.setProjection(null); criteria.addOrder(order); 试了,下面是修改后的代码: Criteria criteria = detachedCriteria .getExecutableCriteria(session); int totalCount = ((Integer) criteria.setProjection( Projections.rowCount()).uniqueResult()) .intValue(); criteria.setProjection(null); criteria.addOrder(order); List items = criteria.setFirstResult(startIndex) .setMaxResults(pageSize).list(); PaginationSupport ps = new PaginationSupport(items, totalCount, pageSize, startIndex); return ps; 测试后还是不可以的,我用到的是oracle8.0,驱动是jdbc14.jar,请问你用oracle是可以的吗,把你的代码贴出来看看吧,谢谢了。 还有你说的: “如果是oracle的话 其实可以在DetachedCriteria后面直接加上oracle 了” 这是什么意思,能给出具体代码吗? |
|
返回顶楼 | |
发表时间:2006-04-17
我的代码和你差不多 在分页这块才特别处理order 是因为sql server和mysql不支持在去总计数的时候有order by。
把你的sql用sql plus查查 出什么错:) 我用oracle 10g的 8。1。7的都可以 不用对order这一块特别处理 detachedCriteria..addOrder(order); 然后调用分页方法 |
|
返回顶楼 | |
发表时间:2006-04-17
criteria.setProjection(null);; criteria.setResultTransformer(Criteria.ROOT_ENTITY);; if(orders!=null&&orders.length>0);{ for(int i=0;i<orders.length;i++);{ criteria.addOrder(orders[i]);; } } 我的参数是一个order数组,还有criteria.setResultTransformer(Criteria.ROOT_ENTITY);可以在避免在list都是object 使用还得在转换。 这时我的mysql sql server是使用的 ,在oracle是不需要传order参数 直接在DetachedCriteria中添加的order |
|
返回顶楼 | |
发表时间:2006-06-23
"DetachedCriteria实现分页查询不支持排序"这个问题总算找到根源了,的确和使用的数据库有关系,我一直用的都是oracle8的最低版本,在oracle9上测试后就没有问题了,这个问题难倒了不少人,希望大家以后在没有成功的前提下首先看看用的数据库版本吧。
|
|
返回顶楼 | |
发表时间:2006-08-10
直接在你构造的DetachedCriteria时候加order就可以了啊
DetachedCriteria detachedCriteria = DetachedCriteria .forClass(User.class);; order = Order.asc(propertyName);; detachedCriteria.addOrder(order);; 这样就按照属性排序了啊 |
|
返回顶楼 | |