一、项目环境:
1、数据库:oracle 10g
2、ORM框架:hibernate 3 二、问题描述
1、查询时希望能够在对数据排序后取前100条,由于项目已经使用hibernate,所以希望通过小的改造实现上述功能。 2、oracle 不支持例如sql server那样的 top N 语法,目前只知道可以用子查询实现,如 select * from (select * from order o2 order by o2.group_id desc ) where rownum<100;或者
select * from (
select o.*,ROW_NUMBER() over (order by o.group_id desc) MM from order o
)
where MM<100; 3、hibernate 不支持子查询,直接将SQL转换成HQL语句,语法错误
1、数据库:oracle 10g
2、ORM框架:hibernate 3 二、问题描述
1、查询时希望能够在对数据排序后取前100条,由于项目已经使用hibernate,所以希望通过小的改造实现上述功能。 2、oracle 不支持例如sql server那样的 top N 语法,目前只知道可以用子查询实现,如 select * from (select * from order o2 order by o2.group_id desc ) where rownum<100;或者
select * from (
select o.*,ROW_NUMBER() over (order by o.group_id desc) MM from order o
)
where MM<100; 3、hibernate 不支持子查询,直接将SQL转换成HQL语句,语法错误
解决方案 »
- EJB3.0事务问题
- struts怎么得到服务器返回的信息,在action中怎样写
- struts validate问题
- 急,急iframe和Spring框架冲突的问题???????????????????
- tomcat启动不起来?
- 如何用poi把word嵌入到页面?
- Web Service中客户端、服务器端何时产生密钥对和认证库,如何使Client获得Server的公钥?
- 请问这个ActionForm这个类的包在哪里?
- iframe中JSP页面跳转的问题------急急急!!在线等
- Struts問題
- 开始做毕业设计,有些问题还请前辈指点一二!
- SSH中,action引用service时,是定义具体的还是抽象的?
Query query =se.createQuery(hql);
query.setFirstResult(1);
query.setMaxResults(100);
List ret = query.list();
如果数据量大 肯定是得用存储过程进行分页的
而且rownum 这个值生成的时候 本身就要全表扫描的
CREATE TABLE ORDER (
ID INTEGER NOT NULL,
ORDER_NO VARCHAR2(50),
GROUP_ID INTEGER,
SUB_GROUP_MARK_NO INTEGER,
TRAN_TYPE INTEGER,
STATUS INTEGER
CONSTRAINT PK_AIRTICKET_OR PRIMARY KEY (ID)
); CREATE TABLE ORDER_GROUP (
ID INTEGER NOT NULL,
NO VARCHAR2(20),
FIRST_DATE DATE,
LAST_DATE DATE,
STATUS INTEGER,
CONSTRAINT PK_ORDER_GROUP PRIMARY KEY (ID)
); ALTER TABLE AIRTICKET_ORDER
ADD CONSTRAINT FK_AIRTICKE_REF FOREIGN KEY (GROUP_ID)
REFERENCES ORDER_GROUP (ID); 经分析,发现是查询order表时order by order_group.id 消耗的时间最大
ALTER TABLE ORDER
ADD CONSTRAINT FK_ORDER_REF FOREIGN KEY (GROUP_ID)
REFERENCES ORDER_GROUP (ID);