`
zhangjunji111
  • 浏览: 47968 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hql写的一个取最大值的语句

阅读更多

  前段时间忙与换工作,好久没有写blog了。以前公司只用oracle数据库,而且开发用jdbcTemplate,什么查询了之类的直接用sql语句就搞定了,可现在改用hebernate,同时公司说要考虑各数据库兼容性的问题,所以许多oracle特有的特性便不能使用,这不,现在就遇到了一个问题需要解决了,需要从一个列表里面找到某一个字段的最大序号,可这个列是字符串类型,格式为‘省份’+'部门'+顺序号,现在需要根据省份以及部门找到最大的序号,我以前用sql语句很容易就可以解决该问题了.解决办法:
 先取该列中的序号,然后将其转化为整型,再取最大值就可以,sql语句如下:

 select max(to_number(substr(列名,前缀长度))) maxnum from 表名

 
  现在要用hql解决,而我以前也不了解hql,还要有internet,从网上找了找资料,还真找到了,hql也提供获取子串的函数,SUBSTRING(s,offset,length)得到hql语句:

selelct  max(SUBSTRING(对象.属性名,前缀长度)) from 对象,

 
  测试了一下,发现结果正确,呵呵,有点沾沾自喜了,可是运行了一段时间,却发现序号超过了10的时候,出现问题了,每次取到最大值都是10,执行sql语句发现没有将子字串转化为整形,导致排序是按照字符串类型排序的,再上网查找hql的类型转化,找到了类型转化函数,CAST(t as TYPE)。
  修改hql语句为:

selelct  max( CAST(SUBSTRING(对象.属性名,前缀长度),integer)) from 对象

 

 

执行sql语句,问题搞定。

这里参考了javaeye中http://wangtong40.iteye.com/blog/355624的文章中的hql方法,感谢一下。

分享到:
评论
4 楼 zhangjunji111 2010-07-12  
iq527 写道
如果用namedquery可以吗?

namedquery我没有尝试过,不过你可以试一下,如果可以,也可以贴出来。
3 楼 zhangjunji111 2010-07-12  
lxtkong-029 写道
不错,挺好的。如果数据量有3000万以上的话,不知道效率如何

如果数据量超过3000万,我估计会死,以前工作时候,数据量超过1000万时候,取总量都会等好长时间的。
2 楼 iq527 2010-07-12  
如果用namedquery可以吗?
1 楼 lxtkong-029 2010-07-12  
不错,挺好的。如果数据量有3000万以上的话,不知道效率如何

相关推荐

    hql语句语法详解hql语句

    - 查询年龄的最大值:`SELECT MAX(p.age) FROM Person AS p` - 连接字符串:`SELECT p.name || "" || p.address FROM Person AS p` #### 4. 多态查询 HQL支持多态查询,即可以在父类中查询子类的数据。例如,如果...

    HQL语句的语法

    - `select new list(p.name, p.address) from Person as p` 创建一个包含name和address的列表。 - `select new ClassTest(p.name, p.address) from Person as p` 创建`ClassTest`类的新实例,传入name和address。 ...

    学习HQL语句

    4. max(…):计算某一列的最大值 5. count(…):统计某一列的行数 四、分组函数 分组函数用于将查询结果分组,然后对每一组进行操作。HQL 中使用 group by 子句实现分组操作。 例如,select o.id, count(o) ...

    hql精点查询语句.doc

    - `max()`:找出最大值。 - `sum()`:计算总和。 - `avg()`:计算平均值。 示例: ```sql Query query = session.createQuery("select count(*) from Student"); Query query = session.createQuery("select avg(s....

    hql查询语句

    3. `max()`用于找到某列的最大值,例如`select max(p.age) from Person as p`找出Person表中的最大年龄。 4. `sum()`用于求和,`select sum(s.age) from Student as s`计算Student表中所有学生的年龄总和。 5. `avg...

    HQL语句的用法

    3. `max(expression)`:返回一组值的最大值。 4. `min(expression)`:返回一组值的最小值。 5. `sum(expression)`:返回一组值的总和。 例如,`select count(o.id) from Order o`将返回Order对象的总数。 ### 分组...

    超级详细的hql查询语句教程

    ### HQL查询语句详解 #### 一、HQL简介 Hibernate Query Language(HQL)是一种面向对象的查询语言,其语法与SQL相似但并非完全相同。HQL的设计旨在更好地支持面向对象编程特性,比如继承、多态以及关联等概念。...

    Hibernate 经常用的一些HQL语句

    ` 通过`join fetch`一次性加载多个关联表的数据。 ### 小结 HQL提供了丰富的查询语法,能够满足复杂的数据查询需求。通过上述实例,我们可以看到HQL不仅支持基本的CRUD操作,还支持更高级的功能,如模糊查询、参数...

    HQL语法大全,并带有详细的例子

    HQL支持多种聚合函数,如avg(平均值)、count(计数)、max(最大值)、min(最小值)、sum(总和)等。例如,统计Person表中的记录总数: ```java select count(*) from Person ``` ##### 4. 条件筛选(WHERE子句...

    HQL 语句 帮助 还行

    - `select new ClassTest(p.name, p.address) from Person as p`:如果`ClassTest`是一个具有`name`和`address`构造函数的类,那么它将创建`ClassTest`对象。 3. **聚集函数**: - `avg`, `count`, `max`, `min`,...

    hibernate hql各类查询范例

    在第一个示例中,我们看到一个名为 `findPerson` 的方法,该方法执行了一个 HQL 查询来查找满足特定条件的人。这里的 HQL 语句为: ```java "from syidt.modules.grp.basegrp.persistence.Person as person where ...

    HQL经典查询语句[文].pdf

    本文将深入探讨HQL的经典查询语句,帮助开发者更好地理解和运用这一强大的查询工具。 首先,HQL支持过滤查询结果中的重复元素。例如,如果想要从`customer`表中获取所有不重复的客户名称,可以使用`distinct`关键字...

    HQL连接查询和注解使用总结

    - `maxElement()`/`maxElement`: 对于包含基本类型元素的集合,获取最大值元素。 - `elements()`: 获取集合中的所有元素。 #### 查询性能优化 - **Hibernate查询优化策略**: - 使用延迟加载避免加载不必要的...

    hql语言中的一些常用的方法

    - **单参数查询**:当查询条件只有一个时,可以使用带有单个参数的方法,例如:`this.getHibernateTemplate().find("from bean.User u where u.name=?", "test")`,这将返回所有名字为“test”的用户。 - **多参数...

    HQL 查询语言基础 二

    `as p`则定义了一个别名`p`,方便后续在查询语句中引用这个实体。 #### 二、SELECT 子句 `SELECT`子句用于指定查询结果集的列或字段。例如: ```hql SELECT p.name FROM Person as p ``` 此示例中,查询将返回...

    HQL常用函数

    1. **CAST(t as type)**:此函数用于将一个值从一种类型转换为另一种类型。例如,`CAST('10' as int)`将把字符串`'10'`转换为整数`10`。 以上介绍了HQL中一些常用的函数及其用法,这些函数可以帮助开发者更高效地...

    hql中常用函數介紹

    例如,如果我们有一个字段`oldSid`,其值为"812108M00003",我们可以使用以下HQL语句来截取并重组这个字段: ```sql hql = "select substring(oldSid,5, 2)+'-'+substring(oldSid,7,6) as newSid from Table"; ``` ...

    Hibernate HQL查询 分页查询 模糊查询.docx

    这里的关键点在于使用`createQuery`方法创建了一个HQL查询对象,并通过`setString`方法设置参数值,最后通过`list`方法执行查询并获取结果列表。 #### 三、分页查询 分页查询在处理大量数据时非常有用,可以有效地...

    课程hibernate查询集合.pdf

    - `max()`:找出最大值,例如`select max(s.age) from Student as s`返回`Student`年龄的最大值。 - `sum()`:计算总和,如`select sum(s.score) from Student as s`将返回所有学生的分数之和。 - `avg()`:计算...

Global site tag (gtag.js) - Google Analytics