问题起因:
抛了异常: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后,设置了AliasToBeanResultTransformer的ResultTransformer,要调用addScalar方法,加了addScalar方法后,跑通了。
接下来的追问:
addScalar后,对结果集的解析有什么影响?
分享到:
相关推荐
在Java的持久化框架Hibernate中,开发者经常需要根据特定需求查询数据库,并将查询结果映射到自定义的对象上,这通常涉及到使用HQL(Hibernate ...在实际应用中,结合DAO模式可以更好地组织和管理数据访问层的代码。
在Hibernate中执行原生SQL查询时,可以通过`addScalar`方法指定返回值的类型,从而改变Hibernate对char类型字段的处理方式。具体操作如下: ```java Session session = this.getSession(); SQLQuery query = ...
- 使用`Session.createSQLQuery()`方法创建SQLQuery对象,然后通过`addScalar()`指定返回值类型,`executeUpdate()`或`list()`执行存储过程。 3. **调用存储过程的方法** - **简单调用**:对于无参数或只接收输入...
本篇文章将详细解析如何使用Hibernate的SQLQuery来进行本地SQL查询,并探讨其各种应用场景。 1. **创建SQLQuery对象** 要执行本地SQL查询,首先需要通过Session对象的createSQLQuery()方法创建SQLQuery实例。例如...
- **类型转换**: Hibernate不会自动将查询结果转换为对象,需要使用addScalar()或addEntity()指定映射规则。 - **SQL优化**: 考虑到性能,尽量避免过多使用原生SQL,因为这可能会丢失ORM的一些好处,如缓存、连接池...
每次对对象的修改都会暂存在Session中,直到事务结束时才将这些变更同步到数据库。这减少了不必要的数据库交互,提高了效率。然而,一旦Session关闭,所有未持久化的对象将会丢失。 2. 第二级缓存:这是一个可选的...