问题起因:
抛了异常: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后,对结果集的解析有什么影响?
分享到:
相关推荐
Double max = (Double) sess.createSQLQuery("select max(cat.weight) as maxWeight from cats cat").addScalar("maxWeight", Hibernate.DOUBLE).uniqueResult(); ``` 这个查询返回了 cats 表中 weight 列的最大值。...
Hibernate 中的 createQuery 和 createSqlQuery 区别详解 在 Hibernate 中,createQuery 和 createSqlQuery 是两个常用的查询方法,但是它们之间存在着一些...因此,在选择使用哪种方法时,需要根据实际情况进行考虑。
在查询时,如果实体在映射时有一个 many-to-one 的关联指向另外一个实体,必须也返回那个实体,否则会导致发生一个"column not found"的数据库错误。这些附加的字段可以使用*标注来自动返回,但我们希望还是明确指明...
这种方式在处理一些特定的、效率较高的SQL查询时非常有用。 首先,我们需要理解Hibernate中的`SQLQuery`接口,这是执行原生SQL查询的主要入口。通过`Session`对象的`createSQLQuery`方法,我们可以创建一个`SQL...
在Android应用启动时,通常需要初始化数据库,包括创建表和填充初始数据。Hibernate4Android提供了SessionFactoryBuilder和SessionFactory来完成这些任务。 7. 性能优化 由于Android的资源限制,优化数据库操作至关...
当SQL查询的结果包含部分实体属性时,可以使用`addScalar()`方法指定列与对象属性的映射。比如,以下代码展示了如何将SQL查询的结果映射到`Guestbook`对象的特定字段: ```java String sql = "select id, name, ...
在Hibernate中执行原生SQL查询时,可以通过`addScalar`方法指定返回值的类型,从而改变Hibernate对char类型字段的处理方式。具体操作如下: ```java Session session = this.getSession(); SQLQuery query = ...
- **复杂查询**:当需要执行复杂的数据库操作时,如分组、聚合、子查询等,原生SQL能更好地表达这些需求。 - **性能优化**:有时候为了优化查询性能,需要对底层的SQL语句进行精确控制。 - **特定功能支持**:某些...
- 使用`Session.createSQLQuery()`方法创建SQLQuery对象,然后通过`addScalar()`指定返回值类型,`executeUpdate()`或`list()`执行存储过程。 3. **调用存储过程的方法** - **简单调用**:对于无参数或只接收输入...
本篇文章将详细解析如何使用Hibernate的SQLQuery来进行本地SQL查询,并探讨其各种应用场景。 1. **创建SQLQuery对象** 要执行本地SQL查询,首先需要通过Session对象的createSQLQuery()方法创建SQLQuery实例。例如...
在处理涉及多表的查询时,可能会遇到字段名冲突的问题。为了解决这个问题,可以使用别名: ```java List<Cat> cats = sess.createSQLQuery("select {cat.*} from cats cat") .addEntity("cat", Cat.class) .list...
- **类型转换**: Hibernate不会自动将查询结果转换为对象,需要使用addScalar()或addEntity()指定映射规则。 - **SQL优化**: 考虑到性能,尽量避免过多使用原生SQL,因为这可能会丢失ORM的一些好处,如缓存、连接池...
存储过程是预编译的SQL语句集合,它们在数据库服务器上被编译一次,然后在后续调用时执行。相比直接执行SQL,存储过程可以提高性能,减少网络传输,并且提供更好的安全性,因为它们可以封装复杂的业务逻辑,限制对...
Query 对象可以通过 Session 对象的 createSQLQuery() 或 createQuery() 方法创建,例如: ```java Session session = sf.openSession(); Query query = session.createSQLQuery("select * from Tree t where pid in...
此外,`Session.createQuery()`或`Session.createSQLQuery()`可以用来执行更复杂的HQL(Hibernate Query Language)或原生SQL查询。 6. **事务管理**:在进行多步骤操作时,如同时修改多个记录,需要使用事务确保...
当我们需要执行一些特殊的、复杂的或者非标准的SQL查询时, Hibernate的本地SQL查询功能就显得尤为实用。本文将深入探讨如何使用Hibernate将本地SQL查询的结果封装成对象。 首先,本地SQL查询(Native SQL)是指...
在使用Hibernate进行数据查询时,我们常常会遇到两种方式来构造查询:`createQuery`和`createSQLQuery`。这两种方法都是Hibernate提供的,但它们在功能和使用上有所不同。 `createQuery`是基于Hibernate Query ...