`

hibernate中SQLQuery的addEntity();方法

阅读更多

如果使用原生sql语句进行query查询时,hibernate是不会自动把结果包装成实体的。所以要手动调用addEntity(Class class)等一系列方法。

如session.createSQLQuery(sql).addEntity(Class class);注意hibernate3.0.5不支持,单个参数的addEntity方法

另外,hibernate3.2可以对原生sql 查询使用ResultTransformer。这会返回不受Hibernate管理的实体。
session.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS")
.setResultTransformer(Transformers.aliasToBean(CatDTO.class))

或setResultTransformer(new AliasToBeanResultTransformer (CatDTO.class))
上面的查询将会返回CatDTO的列表,它将被实例化并且将NAME和BIRTHDAY的值注射入对应的属性或者字段。
http://bbs.xml.org.cn/blog/more.asp?name=lhwork&id=15351

但必须注意,对每一个列都必须addScalar("列名")

既然如此,

那么setResultTransformer与addEntity的区别是什么呢?一个区别是前者支持查任意的列,后者必须用select * from users的形式或select

{a.*},{b.*} from a,b where ....。

查询托管对象

view plaincopy to clipboardprint?
String sql = "select c.id, c.name from Clazz c , student s where s.class_id = c.id   ";     
  
List<Clazz> clazzs = (List<Clazz>) session.createSQLQuery(sql)        
  
                                     .addScalar("id", Hibernate.LONG)  
  
                                     .addScalar("name", Hibernate.STRING)       
  
                                     .setResultTransformer(Transformers.aliasToBean(Clazz.class)).list();  
String sql = "select c.id, c.name from Clazz c , student s where s.class_id = c.id   ";
List<Clazz> clazzs = (List<Clazz>) session.createSQLQuery(sql)
.addScalar("id", Hibernate.LONG)
.addScalar("name", Hibernate.STRING)
.setResultTransformer(Transformers.aliasToBean(Clazz.class)).list();

特别注意:

1. 如果不设置addScalar方法可能会报转型错误的异常.

2.托管查询可以使用投影,只查询指定的列属性

分享到:
评论

相关推荐

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

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

    hibernate执行原生sql语句

    在上面的代码中,我们使用 `Session.createSQLQuery()` 方法创建了一个 `SQLQuery` 对象,然后使用 `addEntity()` 方法指定了查询结果的实体类型,最后使用 `list()` 方法执行查询并获取结果。 使用 ...

    Hibernate+本地SQL查询SQLQuery.pdf

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

    hibernate 执行原生sql的几种方式

    SQLQuery query = session.createSQLQuery("SELECT * FROM User"); List results = query.list(); ``` 这种方法可以自由地编写任何有效的SQL,但需要手动映射查询结果到Java对象。如果返回结果需要映射到实体类...

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

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

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

    首先,我们需要理解Hibernate中的`SQLQuery`接口,这是执行原生SQL查询的主要入口。通过`Session`对象的`createSQLQuery`方法,我们可以创建一个`SQLQuery`实例,然后设置SQL语句: ```java Session session = ...

    Native SQL查询 (使用SQLQuery).doc

    在 Hibernate 中,使用 SQLQuery 可以执行 Native SQL 查询,控制查询的执行是通过 SQLQuery 接口进行的,通过执行 Session.createSQLQuery() 获取这个接口。下面将详细介绍如何使用这个 API 进行查询。 标量查询...

    hibernate将本地SQL查询结果封装成对象(最终).zip

    - `SQLQuery`对象:通过`Session.createSQLQuery()`方法创建,用于执行自定义SQL查询。 - 结果集转换:`addEntity()`方法用于指定查询结果应被映射到哪个实体类,`list()`或`scroll()`方法执行查询并返回结果集,...

    Hibernate中的查询:HQL、Criteria、原生SQl

    SQLQuery query = session.createSQLQuery(sql); query.addEntity(User.class); List&lt;User&gt; users = query.list(); ``` 原生SQL查询可以返回结果集、单个值或自定义的结果类型。但需要注意的是,这种方式可能会丢失...

    Hibernate_Query查询所有数据

    sqlQuery.addEntity(YourEntityName.class); List&lt;YourEntityName&gt; allData = sqlQuery.list(); transaction.commit(); session.close(); ``` 在这里,你需要将`your_table_name`替换为实际的数据库表名,并...

    关于hibernate 的createQuery和createSqlQuery 的区别

    在 Hibernate 中,createQuery 和 createSqlQuery 是两个常用的查询方法,但是它们之间存在着一些关键的区别。了解这两个方法的差异对于正确地使用 Hibernate 进行数据库操作至关重要。 createQuery 方法 ...

    spring hibernate执行存储过程的例子

    SQLQuery query = session.createSQLQuery(sql).addEntity(YourResultEntity.class); query.setParameter(1, param1); query.setParameter(2, param2); List&lt;YourResultEntity&gt; result = query.list(); for ...

    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查询方法

    SQLQuery query = session.createSQLQuery(sql).addEntity(User.class); query.setParameter(1, "testUser"); List&lt;User&gt; users = query.list(); ``` ### 五、Hibernate的Criteria与DetachedCriteria Criteria API...

    hibernate试验

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

    hibernate多表联合查询

    SQLQuery query = session.createSQLQuery(sql); // 将结果映射到一个自定义的结果类 query.addEntity(CustomerSummary.class); List&lt;CustomerSummary&gt; resultList = query.list(); ``` **说明:** - 在Native ...

    在Java的Hibernate框架中使用SQL语句的简单介绍

    在Hibernate中,你可以通过`Session`对象的`createSQLQuery`方法创建一个SQL查询。例如: ```java Query query = session.createSQLQuery("select * from t_user usr"); ``` 执行上述代码后,Hibernate将会执行...

    hibernate查询详解

    SQLQuery q = s.createSQLQuery("select * from user").addEntity(User.class); List&lt;User&gt; rs = q.list(); ``` 然而,这种方式破坏了Hibernate的跨数据库特性,且不易维护。 3. QBC(Query By Criteria)标准...

Global site tag (gtag.js) - Google Analytics