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

HQL获取某个字段值时容易犯的错误

JDK 
阅读更多

这是一个使用集合类泛型的例子:

如果要使用集合类的泛型,你安装的JDK必须是1.5或者更高版本。

需要记住一点:集合类的泛型不支持基本数据类型(int,long,float,double,char,byte,boolean,short)


比如,有个实体类Message,里面有个字段 orderNumber(排序号),当然,这个字段有setter和getter方法.

orderNumber:Integer 唯一

需要获取这个orderNumber的最大值。

先定义一个hql语句

String hql = "select max(m.orderNumber) from Message m where m.messageFlag=1";

List<E> list = this.getSession().getSessionFactory().openSession().createQuery(hql).list();

在这个List的泛型E里面,很多人会使用Message,如下:

List<Message> list = this.getSession().getSessionFactory().openSession().createQuery(hql).list();

然后做 Integer orderNumber = list.get(0).getOrderNumber();

list.get(0)表示返回一个泛型对象,在这里是Message。

如果执行这个操作,会报有一个异常:

java.lang.ClassCastException: java.lang.Integer can not pase to Message....

原因是:我们从hql语句中可以看出,如果执行这个语句,返回的应该是一个Integer类型。

但是我们在List<E>泛型里我们返回的是Message。

所以会出现了类型转换异常。

此时,泛型E应该是Integer,如下:

List<Integer> list = this.getSession().getSessionFactory().openSession().createQuery(hql).list();

Integer orderNumber = list.get(0);

此时,就可以成功的返回最大值了。



同理,如果要返回的字段是String,那么泛型E应该是String .

其他字段类似。
0
0
分享到:
评论

相关推荐

    数据库学习

    4. **合并列值**:在MySQL中,可以使用`GROUP_CONCAT(字段名 SEPARATOR 分隔符)`函数将多行数据的某个字段合并成一行显示: ``` SELECT GROUP_CONCAT(字段名 SEPARATOR 分隔符) FROM 表名; ``` 其中默认的分隔符...

    反射机制数据库万能查询代码简化

    例如,如果我们想要根据某个字段进行查询,可以遍历实体类的所有字段,然后构建如下的HQL: ```java String hql = "FROM " + entityClassName + " WHERE "; for (Field field : entityClass.getDeclaredFields()) {...

    hibernate错误示例一

    标题“Hibernate错误示例一”表明我们将探讨在使用Hibernate这个流行的Java对象关系映射(ORM)框架时可能会遇到的问题。Hibernate允许开发人员将Java对象与关系数据库中的表进行映射,简化了数据操作,但同时也可能...

    hibernate criteria的使用方法

    上述代码通过 `Restrictions.like()` 方法创建了一个模糊匹配的查询条件,查询所有 `customer` 字段包含 `name` 的记录。 3. **使用 HQL 和 SQL 查询**: - **HQL 查询**: ```java String hql = "select s....

    快捷删除hive表的工具

    然而,当面对大量不再需要的Hive表时,手动删除不仅耗时且容易出错。针对这个问题,出现了“快捷删除Hive表的工具”,它极大地简化了这一过程。 这个工具的主要特点包括: 1. **批量删除功能**:此工具允许用户...

    Hibernate,hibernate笔记

    在Hibernate映射文件(hbm.xml)中,如果指定了not-null属性为true,那么对应的JavaBean字段就必须有值,否则会引发这个异常。 2. **Hibernate配置**: `Hibernate.cfg.xml`文件是Hibernate的配置文件,包含了...

    Java SSH2框架的CRUD经典例子

    - HQL或SQL查询错误:编写查询语句时语法错误或逻辑错误。 学习并理解这个SSH2 CRUD示例,开发者可以深入掌握SSH2框架的工作原理,提高在实际项目中的应用能力。同时,解决上述提到的常见问题也能帮助开发者在遇到...

    QBC查询的别名方的

    例如,在进行分组统计时,可能只需要查询结果中的某几个字段而不是整个对象。 - **使用场景**:当只需获取部分数据而非完整对象时,使用Projection可以提高查询效率。 #### 3. HBM与查询结果一致性 - **问题背景**...

    hibernate入门数据简单插入

    对于简单的数据插入,可能不需要HQL,但在复杂查询时,HQL能提供强大的功能。 7. **Criteria API**:另一种查询方式是Criteria API,它是比HQL更面向对象的查询方式,通过构建Criteria对象和其子对象来表达查询条件...

    struts+hibernate树形菜单

    7. **性能优化**:为了提高性能,可以采用懒加载策略,只在首次展开某个节点时加载其子节点,而不是一次性加载所有数据。此外,使用缓存技术,如Hibernate的第二级缓存,也可以减少对数据库的频繁访问。 8. **测试...

    华为面试题

    Nvl()用于处理NULL值,当给定的字段值为NULL时,返回第二个参数的值。Decode()函数提供了一种条件判断的简便方法。其他常用的Oracle函数包括To_Char()、To_Date()、substr()等。 【SQL查询】 SQL查询中,外连接...

    SSH框架测试题

    - **概念**:延迟加载是一种优化技术,它允许Hibernate仅在真正需要某个对象关联的数据时才从数据库加载这些数据。这有助于减少应用程序启动时的内存消耗,并提高整体性能。 - **实现方式**:通过设置`lazy=true`...

    Java框架面试题总结

    如果验证失败,将返回错误信息到视图层显示。 - **调用Action对象**:验证通过后,`ActionServlet`根据`struts-config.xml`配置文件中的配置,找到相应的`Action`对象,并调用其`execute()`方法。在这个过程中,`...

    SSH框架面试题.pdf

    例如,在获取一个对象时,其关联对象不会立即加载,直到明确访问关联对象时才进行加载。 17. **Hibernate如何实现事务管理?** Hibernate通过Transaction接口提供了对本地事务的支持。可以通过Session对象开启和...

Global site tag (gtag.js) - Google Analytics