`

Hibernate SQLQuery:addEntity & addScalar

阅读更多
使用它们时的注意:
1.Query 没有addScalar()和addEntity()方法,使用Query的子接口SQLQuery才有这两个方法
2.如果查询的结果集的字段为多个,如:
String sql = "select id as \"id\",iata as \"iata\",flight as \"flight\",dest as \"dest\",domint as \"domint\" " +
			" ,sdt as \"sdt\",task_nature as \"taskNature\",est_date as \"estDate\",act_date as \"actDate\",remark as \"remark\" " +
			" from FIDS_DEPF";
则如果只
addScalar("sdt", Hibernate.TIMESTAMP)(之所以为Date类型的sdt做addScalar操作,是因为不做这个操作的情况下会有时分秒丢失情况的发生):
this.getSessionFactory().getCurrentSession().createSQLQuery(sql)
				.addScalar("sdt", Hibernate.TIMESTAMP)
				.setResultTransformer(Transformers.aliasToBean(FidsDepfDto.class))
				.list();  
则返回的FidsDepfDto 的list结果集中,将只用sdt有值,其他都为null!所以,在使用addScalar()时,select的每个字段都必须要addScalar()!


addEntity和ResultTransformer 的区别:
addEntity(Class clazz)的参数Clazz必须是被hibernate管理的持久化bean!否则会报MappingException: Unknown entity。如下面代码是不行的(这里的FidsDepfDto是一个不受hibernate管理的非持久化对象(just a dto,not PO!))
this.getSessionFactory().getCurrentSession().createSQLQuery(sql).addEntity(FidsDepfDto.class)

而ResultTransformer可以接受一个任意的bean,只要这个bean的属性(严格说是setXxx()中的xxx)与select的结果集列名存在对应关系:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html#d0e13904
引用
It is possible to apply a ResultTransformer to native SQL queries, allowing it to return non-managed entities.




分享到:
评论

相关推荐

    Hibernate+本地SQL查询SQLQuery宣贯.pdf

    在某些情况下,开发者可能需要使用原生SQL查询来执行特定的数据库操作,这时就可以利用Hibernate的SQLQuery功能。本文将详细讲解如何使用Hibernate的SQLQuery进行本地SQL查询。 首先,创建SQLQuery实例是通过...

    hibernate将本地SQL查询结果封装成对象

    SQLQuery query = session.createSQLQuery(sql); ``` 如果查询返回的是单个对象,我们可以使用`addEntity()`方法指定结果应映射到的实体类: ```java query.addEntity(MyEntity.class); MyEntity result = ...

    Hibernate+本地SQL查询SQLQuery.pdf

    《Hibernate中的本地SQL查询SQLQuery》 在Java的持久化框架Hibernate中,有时我们需要使用原生的SQL查询来实现特定的数据库操作,这时就需要利用到SQLQuery接口。本篇文章将详细解析如何使用Hibernate的SQLQuery来...

    Native SQL查询 (使用SQLQuery).doc

    使用 SQLQuery 可以执行 Native SQL 查询,控制查询的执行是通过 SQLQuery 接口进行的,可以使用 addScalar() 方法指定返回值的类型,也可以使用 addEntity() 方法让原生查询返回实体对象,另外还可以使用 addJoin()...

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

    List[]> results = sqlQuery.addScalar("id", Hibernate.LONG).addScalar("name", Hibernate.STRING).list(); ``` 这将返回一个Object数组的列表,每个数组对应一条查询结果,数组中的元素按照SQL查询中选择字段的...

    Native-SQL查询 (1).ppt

    Hibernate提供`Session`接口的`createSQLQuery()`方法来创建一个`SQLQuery`对象,用于执行原生的SQL查询。例如,以下代码展示了如何通过Native SQL获取`guestbook`表的所有记录,并打印结果: ```java ...

    hibernate 的createSQLQuery的几种用法

    一、简单的 SQLQuery 在最简单的情况下,我们可以使用 createSQLQuery 方法来执行一个简单的 SQL 查询,例如: ```java List cats = sess.createSQLQuery("select * from cats").addEntity(Cat.class).list(); ``` ...

    hibernate试验

    - 在执行本地SQL查询时,我们需要使用`addEntity()`方法来指定返回结果中对应的实体类,这样Hibernate就能自动将查询结果转化为Java对象。 2. **创建一个基于SQL的查询** - 在`StudentDAO.java`中,`sqlQuery()`...

    Hibernate学习笔记(2)

    5. Native SQL:直接执行SQL查询,通过`createSQLQuery()`创建查询,使用`addEntity()`和`addScalar()`指定结果映射。这样可以直接利用数据库特定的功能。 6. Named SQL queries:预定义的SQL查询,可以在配置文件...

    Hibernat使用原生的SQL

    SQLQuery query = session.createSQLQuery("SELECT * FROM my_table"); List results = query.list(); ``` 2. **EntityName.queryFromNativeSQL()**: 对于返回结果需要映射到某个实体类的情况,可以使用这个方法...

    Query对象setResultTransFormer()

    在 Hibernate 中,Query 对象是用来执行 HQL 或 SQL 查询的重要对象。今天我们来探讨 Query 对象的 setResultTransformer() 方法,该方法可以将查询结果转换为指定的对象 или Map。 首先,让我们了解一下 Query ...

Global site tag (gtag.js) - Google Analytics