0 0

HQL子查询中如何写分页?5

如有个HQL:
update Task t set t.assigner='admin'
where t.customer in
(select c from Customer c where c.isAssigned='0')

如果N个人平分任务,那么需要对Customer的子查询分页,有没有什么方法?
update Task t set t.assigner='userA'
where t.customer in
(select c from Customer c where c.isAssigned='0' and 第一页)

update Task t set t.assigner='userB'
where t.customer in
(select c from Customer c where c.isAssigned='0' and 第二页)

如果是SQL可以直接在子查询中加入分页语句,Hql应该怎么加呢?
问题补充:
除了hibernate的方法,其他方法就不用说了,如果用sql和存储过程就很简单了。你这个解决方案的问题是稍微大一点数据量就不行了,你是通过拼hql串来实现,不可能支持大数据量,就算只有几万条都不行
2008年6月20日 13:00

1个答案 按时间排序 按投票排序

0 0

可以使用数据库底层函数 如sql server TOP,oracle rownum等来实现
当然个人觉得如果有hibernate来实现的话,不会这么做
写分页查询语句,和一个update语进行
1,select Count(c) from Customer c where c.isAssigned='0'
获取部页数数
计算total
再计算出:length(页长度)
2,select c from Customer c where c.isAssigned='0'
创建Query q
一个for循环进行分页查询
3,进行update语句

Query q = session.createQuery("select c from Customer c where c.isAssigned='0'");
String updateQry = update Task t set t.assigner='admin' 
where t.customer.id in (");
for(int i=0;i<total;i=i+length){
   q.setFirstResult(i);
   q.setMaxResults(length);
  List list = q.list()
   String s = "";
   for(j=0;j<list.size();j++){
     if(s.length>0)
       s+=",";
     s+= ((Customer)list.get(i)).getCustomerId();
   }
   if(s.length==0)
     break;
   updateQry+= s+")";
   session.createQuery(updateQry).executeUpdate();
  }

当然还可以用存储过程

2008年6月21日 08:55

相关推荐

    hql分页

    HQL提供了更优的解决方案,如使用子查询和聚合函数来实现分页。 在HQL中,可以使用`setFirstResult`和`setMaxResults`方法进行分页。`setFirstResult`指定从哪一条记录开始,而`setMaxResults`则限制返回结果的数量...

    Hibernate HQL查询.docx

    除了基本的查询之外,HQL 还支持更复杂的查询,例如连接查询、子查询以及分页查询等。 1. **连接查询** - 使用 `JOIN` 关键字进行连接查询。 - 示例:查询所有用户的订单信息。 ```java String hql = "SELECT u...

    精通HQL.doc

    7. **子查询**:在HQL中,你可以嵌套查询,如 `from Student s where s.id in (select s.id from Student s where s.ssex='男')`,将返回所有男学生的对象。 8. **函数和方法调用**:HQL允许你在查询中使用数据库...

    基于hibernate 通用查询框架,包含查询、分页列表 功能

    Awake框架hql解析模块,支持Hql子查询的用法: http://hi.baidu.com/jfheng/blog/item/96ad1852d338a4080cf3e318.html 上面有最新功能介绍,文档说明,另外希望大家给我留言,提供一些好的建议 通用查询页面中的...

    Hibernate 课件_HQL

    - **大小写不敏感**:除了Java类名和属性名外,HQL本身对于关键字的大小写不敏感。 - **依赖于`Query`类**:每个`Query`实例代表了一个具体的查询。 #### Query接口及其主要方法 - **创建Query实例**: - `Query...

    HQL语言大全 高清晰可复制版

    - **子查询**:在HQL中,可以嵌套查询,作为WHERE子句的一部分或者在FROM子句中使用。 4. **HQL的参数绑定** 类似于SQL的预编译语句,HQL也支持参数绑定,防止SQL注入。例如: ```sql FROM Employee e WHERE e....

    03-HQL实用技术.pdf

    - **目标**: 掌握HQL数据查询技术、实体查询、属性查询、参数绑定、查询排序、查询分组及查询分页等技能。 #### 四、总结 通过对以上知识点的学习,可以深入理解HQL在处理不同场景下的应用技巧,特别是关联关系的...

    Hibernate-HQL.rar_HQL_hibernate hql

    2. 子查询:可以在WHERE或HAVING子句中嵌套HQL查询,如“SELECT u FROM User u WHERE u.id IN (SELECT f.userId FROM Friend f WHERE f.friendId=100)”。 3. 动态HQL:通过Criteria API或Query接口,可以构建动态...

    hql练习之种树.zip

    3. 子查询:可能需要在查询中嵌套查询,以满足特定的条件。 4. 分页和排序:如果数据量大,可能需要学会如何分页和排序结果。 5. 递归查询:处理树形结构时,可能会涉及递归查询来获取所有子节点。 6. 数据类型转换...

    hibernate查询语言hql

    Hibernate查询语言(HQL)...通过学习HQL的基础语法、关联查询、子查询、组合查询、分页和动态构建,开发者能够高效地管理ORM层的数据操作,提高代码质量与项目稳定性。结合实际项目,灵活运用HQL将极大提升开发效率。

    SSH分页查询方法

    在实际开发中,分页查询通常结合Hibernate的Criteria API或者HQL(Hibernate Query Language)进行,这样可以方便地指定查询条件并进行分页。例如,我们可以使用`setFirstResult()`和`setMaxResults()`方法来设置...

    Hibernate+sqlserver2000分页

    常用的方法是使用`ROW_NUMBER()`函数配合子查询或`TOP`关键字。例如: ```sql SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNum, column1, column2 FROM YourTable ) AS DerivedTable ...

    Oracle的SQL分页实践

    为了解决这个问题,Oracle 10g引入了新的功能:ROW_NUMBER()函数,配合子查询和WITH子句(即CTE,公共表表达式)可以实现更高效的分页: ```sql WITH ordered_data AS ( SELECT t.*, ROW_NUMBER() OVER (ORDER BY ...

    ssh+oracle分页

    在Hibernate中,由于ROWNUM不能与WHERE子句一起使用,我们通常会结合子查询或者使用Oracle的高级分页特性如ROWNUMBER()来实现。例如,通过在子查询中计算行号,然后在外层查询中筛选特定范围的行。 5. **分页组件和...

    hibernate通用查询

    HQL可以方便地进行对象间的关联查询,支持聚合函数和子查询。 3. Query API:这是基于HQL的查询接口,提供了执行HQL查询的方法。 三、通用查询实现 在实际项目中,我们通常会创建一个CommonDaoImpl类,封装常见的...

    HQL语言大全 跳楼分值

    子查询可以在FROM、WHERE、HAVING子句中使用,也可以作为SELECT的结果。例如: ```sql SELECT p FROM Product p WHERE p.price &gt; (SELECT AVG(price) FROM Product) ``` 这个查询将返回价格高于平均价格的所有产品。...

    SSH+ORACLE好用分页

    在Oracle数据库中,可以使用内置的SQL分页函数,如ROWNUM或ROW_NUMBER(),结合子查询和临时表,实现高效的分页查询。另外,Oracle还支持索引优化,通过创建索引可以显著提高分页查询的性能。 总的来说,"SSH+ORACLE...

    hibernate-HQL用例

    5. **子查询** HQL允许在查询语句中嵌套查询,这对于复杂条件的筛选非常有用。如找出年龄大于所有用户平均年龄的用户: ```sql SELECT u FROM User u WHERE u.age &gt; (SELECT AVG(age) FROM User) ``` 6. **参数...

    SSH+ORACLE通用分页

    在Oracle数据库中,进行分页查询通常涉及SQL的`ROWNUM`或`ROW_NUMBER()`函数,以及子查询或嵌套查询。`ROWNUM`在早期版本的Oracle中被广泛使用,它会为每行数据分配一个唯一的数字,通过与特定范围的比较来获取指定...

    HQL语句的用法

    HQL也支持子查询,可以在`where`或`from`子句中嵌套查询。例如,`select o from Order o where o.id in (select pid from Product p where p.category='Electronics')`将返回所有属于'Electronics'类别产品的订单。 ...

Global site tag (gtag.js) - Google Analytics