- 浏览: 2887702 次
- 性别:
- 来自: 武汉
-
文章分类
- 全部博客 (1173)
- 名言警句 (5)
- 心情随笔 (50)
- 数据库 (57)
- Java基础 (241)
- J2EE框架 (91)
- 数据结构 (12)
- 程序设计 (21)
- WEB技术 (128)
- 网络日志 (12)
- IT资讯 (247)
- linux (64)
- solaris (2)
- 其它 (143)
- WebService (4)
- 日语学习 (2)
- 机器人 (5)
- Android (5)
- cgywin (3)
- Game (1)
- DWR (1)
- spring (8)
- canvas (1)
- Guava (3)
- Modbus (5)
- 测试 (6)
- mongodb (9)
- Quartz (2)
- Cron (1)
- windows (2)
- 持续集成 (1)
- bootstrap (3)
- 结对编程 (1)
- nodejs (1)
- Netty (1)
- 安全 (3)
- webstorm (2)
- sparkline (1)
- Job (1)
- git (3)
- Maven (3)
- knockout (5)
- jquery (1)
- bower (1)
- docker (1)
- confluence (4)
- wiki (1)
- GoogleMap (1)
- jekyll (10)
- ruby (2)
- npm (3)
- browserify (1)
- gulp (3)
- openwrt (1)
- discuz (3)
- 输入法 (1)
- JPA (1)
- eclipse (2)
- IntelliJ (1)
- css (1)
- 虚拟机 (1)
- 操作系统 (1)
- azkaban (2)
- scrum (1)
最新评论
-
pangxiea_:
你好, 想请问一下 Linux下 这么使用rxtxcomm 在 ...
使用Java进行串口通信 -
abababudei:
请教一下,这个您是怎么解决的:/dev/ttyS2enteri ...
Java应用程序的MODBUS通讯 -
xuniverse:
hannibal005 写道楼主,我问下 request.se ...
用javascript与java进行RSA加密与解密 -
atxkm:
找了一下午,终于找到了
gulp 拷贝文件时如何移除文件目录结构 -
kalogen:
gtczr 写道非常感谢,经过我自己的修改,已经完美实现。发出 ...
用javascript与java进行RSA加密与解密
今天把myblog用sql server部署了一下,可是发现分页查询的时候出现错误,看控制台报错说语句有错,由来发现分页的时候先查询总记录数目的那条语句出错了
select
count
(
*
)
as
y0_
from
myblog_Blog this_
inner
join
myblog_Blog_Category categories3_
on
this_.id
=
categories3_.blogId
inner
join
myblog_Category category1_
on
categories3_.categoryId
=
category1_.id
where
category1_.id
=
?
order
by
this_.postTime
desc
原来开发的时候我是用的mysql,没有任何问题。原因就在最后面的order by 语句,sql server 在select count(*)里面不能用 order by。然后跟踪代码发现:
public
PaginationSupport getBlogsByCategoryByPage(
final
String categoryId,
final
int
startIndex,
final
int
pageSize) {
return (PaginationSupport) getHibernateTemplate().execute( new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Criteria criteria = session.createCriteria(Blog. class );
Criteria cateCriteria = criteria.createCriteria( " categories " );
cateCriteria.add(Expression.eq( " id " ,categoryId));
criteria.addOrder(Order.desc( " postTime " ));
int totalCount = ((Integer) criteria.setProjection(Projections.rowCount())
.uniqueResult()).intValue();
criteria.setProjection( null );
List items = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
List blogs = new ArrayList();
for (Iterator ite = items.iterator(); ite.hasNext();) {
Object[] objs = (Object[])ite.next();
blogs.add(objs[ 1 ]);
}
PaginationSupport ps = new PaginationSupport(blogs, totalCount, pageSize, startIndex);
return ps;
}
}, true );
}
return (PaginationSupport) getHibernateTemplate().execute( new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Criteria criteria = session.createCriteria(Blog. class );
Criteria cateCriteria = criteria.createCriteria( " categories " );
cateCriteria.add(Expression.eq( " id " ,categoryId));
criteria.addOrder(Order.desc( " postTime " ));
int totalCount = ((Integer) criteria.setProjection(Projections.rowCount())
.uniqueResult()).intValue();
criteria.setProjection( null );
List items = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
List blogs = new ArrayList();
for (Iterator ite = items.iterator(); ite.hasNext();) {
Object[] objs = (Object[])ite.next();
blogs.add(objs[ 1 ]);
}
PaginationSupport ps = new PaginationSupport(blogs, totalCount, pageSize, startIndex);
return ps;
}
}, true );
}
原
来问题就在Criteria.addOrder(Order.desc("postTime"));这句话的位置上面,int totalCount
= ((Integer) criteria.setProjection(Projections.rowCount())
.uniqueResult()).intValue();
这句话的时候就会生成上面那句话,如果在这之前addOrder就会出现问题,如果你用mysql不会出现问题,如果你用sql server就会报错。解决方法就是把addOrder语句放到totalCount下面就可以了。
public
PaginationSupport getBlogsByCategoryByPage(
final
String categoryId,
final
int
startIndex,
final
int
pageSize) {
return (PaginationSupport) getHibernateTemplate().execute( new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Criteria criteria = session.createCriteria(Blog. class );
Criteria cateCriteria = criteria.createCriteria( " categories " );
cateCriteria.add(Expression.eq( " id " ,categoryId));
int totalCount = ((Integer) criteria.setProjection(Projections.rowCount())
.uniqueResult()).intValue();
criteria.setProjection( null );
/*
* Fix a bug ,Order must add after get the totalCount,
* beacuse SqlServer not support order by in the select count(*).
*/
criteria.addOrder(Order.desc( " postTime " ));
List items = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
List blogs = new ArrayList();
for (Iterator ite = items.iterator(); ite.hasNext();) {
Object[] objs = (Object[])ite.next();
blogs.add(objs[ 1 ]);
}
PaginationSupport ps = new PaginationSupport(blogs, totalCount, pageSize, startIndex);
return ps;
}
}, true );
}
return (PaginationSupport) getHibernateTemplate().execute( new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Criteria criteria = session.createCriteria(Blog. class );
Criteria cateCriteria = criteria.createCriteria( " categories " );
cateCriteria.add(Expression.eq( " id " ,categoryId));
int totalCount = ((Integer) criteria.setProjection(Projections.rowCount())
.uniqueResult()).intValue();
criteria.setProjection( null );
/*
* Fix a bug ,Order must add after get the totalCount,
* beacuse SqlServer not support order by in the select count(*).
*/
criteria.addOrder(Order.desc( " postTime " ));
List items = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
List blogs = new ArrayList();
for (Iterator ite = items.iterator(); ite.hasNext();) {
Object[] objs = (Object[])ite.next();
blogs.add(objs[ 1 ]);
}
PaginationSupport ps = new PaginationSupport(blogs, totalCount, pageSize, startIndex);
return ps;
}
}, true );
}
这样生成的sql语句就是这样的。
select
count
(
*
)
as
y0_
from
myblog_Blog this_
inner
join
myblog_Blog_Category categories3_
on
this_.id
=
categories3_.blogId
inner
join
myblog_Category category1_
on
categories3_.categoryId
=
category1_.id
where
category1_.id
=
?
以后大家也要注意了。呵呵。
发表评论
-
spring mvc @controller unit test
2013-11-20 14:14 39001. spring mvc controller imple ... -
Tomcat 生产服务器性能优化
2013-07-23 06:45 1019试想以下这个情景:你已经开发好了一个程序,这个程序的排版很不 ... -
Loading Multiple Spring Application Contexts with their own ClassLoader
2013-07-11 20:45 1085package de.incompleteco.spring ... -
ActiveMQ JMS的测试
2011-04-06 18:15 3931有二种方式可以测试。 1. 透过testng, 在测试类中完 ... -
Maven系列2--pom.xml 配置详解
2011-01-06 18:00 3190<project xmlns="http ... -
fisheye2.3.6 安装笔记
2010-09-16 20:25 2248一. 准备工作 1. 下载fisheye ... -
服务器端编程的十大性能问题
2010-09-15 12:01 1248今年5 月底,瑞士计算 ... -
JMX in spring 配置
2010-09-07 12:00 3072JConsole中的连接:简单的localhost:1099 ... -
Ehcache 2.0:后写式缓存和JTA支持
2010-05-22 11:13 1869开源缓存框架Ehcache 最 ... -
Twitter系统运维经验
2010-04-12 22:24 1563最近看到的另外一个 ... -
采用OSGi框架开发项目的十个问题
2010-03-21 18:08 1471近期,InfoQ针对Java模块 ... -
IBM和Eclipse加大对OSGi的支持
2010-03-21 18:05 1309为Java提供模块性的OSGi,正在受到IBM和Eclipse ... -
Castor功能与应用参考
2010-03-12 12:48 36381. 项目简介Castor是一个开源的Java项目 ... -
hibernate之 DetachedCriteria实现多表查询
2009-07-25 17:13 13118DetachedCriteria detachedCriter ... -
spring AOP 理论知识点总结
2009-07-24 17:47 21981.1 AOP 的概念 ... -
web.xml 中的listener、 filter、servlet 加载顺序及其详解
2009-07-02 16:14 4142在项目中总会遇到一些 ... -
maven笔记
2009-06-22 22:14 1550mvn package : 项目打包 mvn help:ef ... -
利用maven构建多模块项目
2009-06-17 14:28 53741. 先单独构建各模块为一个独立的项目。 jar项目: m ... -
Maven基础
2009-06-17 12:58 1880下载Maven安装文件。 定义环境变量M2_HOME到pat ... -
安装M2eclipse步骤
2009-06-15 14:45 38361.下载下列所需文件 eclipse3.4.2 ...
相关推荐
- 根据计算出的起始位置和每页记录数执行查询,获取分页后的数据列表,并将其封装到`PageSupport`对象中返回。 #### 四、总结 通过上述分析可以看出,该通用分页方法充分利用了Struts、Spring 和 Hibernate 的优势...
PageSupport ps = new PageSupport(); ps.setPageSize(pageSize); ps.setRecordCount(recordCount); System.out.println("----页数------" + ps.getPageCount()); List<LeaveWord> items = new ArrayList(); ...
在Java世界里,我们通常会遇到如MyBatis、Hibernate等ORM框架,它们虽然提供了分页功能,但在某些场景下,自定义分页或者轻量级分页需求更受欢迎。本文将详细介绍一个简洁好用的Java分页工具类的使用方法,并探讨其...
在IT行业中,SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,而这里的"ssh 分页代码(延迟加载)"指的是在SSH框架下实现分页查询时采用的延迟加载技术。延迟加载是一种优化策略,它允许我们在...
查询出列表,也就是返回list, 在我们这个例子中也就是 List<User> , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...
- 可以通过方法名定义不同的查询策略,例如分页查询、排序查询等。 - 示例: ```java Page<Person> findByFirstName(String firstName, Pageable pageable); ``` - **创建查询**: - 可以通过方法名定义基本的...