`

createSQLQuery时,addScalar的应用

阅读更多

 

 

问题起因:

 

         抛了异常:nested exception is org.hibernate.PropertyNotFoundException: Could not find setter for YEARMONTH on class

 

         对应的Model里确实没有属性YEARMONTH 不过名为yearMonth的属性。

         对应的查询sql "        select  a.month_id  as  yearMonth, "

         用这样的方式设置了ResultTransformer q.setResultTransformer(new AliasToBeanResultTransformer(StatInfoForApply.class));

 

 

暂时绕过去:

         换了ResultTransformer q.setResultTransformer(new AliasToEntityMapResultTransformer());

         再加形如result.setYearMonth(((BigDecimal)map.get("YEARMONTH")).longValue());的手动转换。

        

 

回过头来找原因:

         createSQLQuery后,设置了AliasToBeanResultTransformerResultTransformer,要调用addScalar方法,加了addScalar方法后,跑通了。

 

接下来的追问:

         addScalar后,对结果集的解析有什么影响?

 

0
0
分享到:
评论

相关推荐

    hibernate3中通过nativesql或取部分字段并映射为具体对象的实现

    在Java的持久化框架Hibernate中,开发者经常需要根据特定需求查询数据库,并将查询结果映射到自定义的对象上,这通常涉及到使用HQL(Hibernate ...在实际应用中,结合DAO模式可以更好地组织和管理数据访问层的代码。

    Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法

    在Hibernate中执行原生SQL查询时,可以通过`addScalar`方法指定返回值的类型,从而改变Hibernate对char类型字段的处理方式。具体操作如下: ```java Session session = this.getSession(); SQLQuery query = ...

    hibernate存储过程

    - 使用`Session.createSQLQuery()`方法创建SQLQuery对象,然后通过`addScalar()`指定返回值类型,`executeUpdate()`或`list()`执行存储过程。 3. **调用存储过程的方法** - **简单调用**:对于无参数或只接收输入...

    Hibernate+本地SQL查询SQLQuery.pdf

    本篇文章将详细解析如何使用Hibernate的SQLQuery来进行本地SQL查询,并探讨其各种应用场景。 1. **创建SQLQuery对象** 要执行本地SQL查询,首先需要通过Session对象的createSQLQuery()方法创建SQLQuery实例。例如...

    Hibernat使用原生的SQL

    - **类型转换**: Hibernate不会自动将查询结果转换为对象,需要使用addScalar()或addEntity()指定映射规则。 - **SQL优化**: 考虑到性能,尽量避免过多使用原生SQL,因为这可能会丢失ORM的一些好处,如缓存、连接池...

    详解Java的Hibernate框架中的缓存与原生SQL语句的使用

    每次对对象的修改都会暂存在Session中,直到事务结束时才将这些变更同步到数据库。这减少了不必要的数据库交互,提高了效率。然而,一旦Session关闭,所有未持久化的对象将会丢失。 2. 第二级缓存:这是一个可选的...

Global site tag (gtag.js) - Google Analytics