1.sql查询封装对象,配置映射,把查询出来的数据封装到实体当中:

方法一:addEntity(A.class)设定查询出的结果映射到相应的实体中,但是这个实体必须在hibernate的映射文件中配置了相应的映射

//集合中的Object[], Object[0]即使Person,Object[1]即使MyEvent
public List<Object[]> getMyEvents() {String sql = "select p.*,e.* from person_inf as p inner join event_inf as e" +  " on p.person_id=e.person_id";  List list = session.createSQLQuery(sql)  .addEntity("p",Person.class)  .addEntity("e", MyEvent.class)  .list(); return list;} 

方法二:在sql语句中使用构造方法(HQL语句)

Query q = session.createQuery("select new com.hibernate.MsgInfo(m.id, m.cont, m.topic.title, m.topic.category.name) from Msg m");
List<MsgInfo> list=q.list(); 

2.sql查询封装对象,不用配置映射文件,把查询出来的结果封装到实体中:
方法一:setResultTransformer(Transformers.aliasToBean(PostVO.class));//封装到实体,必须添加addScalar()为每个字段添加类型限制,不然会报错

public List<BusinessConfig> getBusByPid(Long proId, Long busId) throws Exception {// TODO Auto-generated method stubSession session = this.getSession();StringBuffer sql = new StringBuffer();sql.append("select distinct business_id as businessId, business_name as businessName, proj_id as pid from view1 where proj_id =");sql.append(proId);if(busId != null) {sql.append(" and business_id=").append(busId);}Query query = session.createSQLQuery(sql.toString()).addScalar("businessId", Hibernate.LONG).addScalar("businessName", Hibernate.STRING).addScalar("pid", Hibernate.LONG).setResultTransformer(Transformers.aliasToBean(BusinessConfig.class));return query.list();}

方法二:query.setResultSetMapping(”“);
使用一个预定义的ResultSetMapping命名

    SQLQuery query = session.createSQLQuery("...");//使用在hbm文件中配置的自定义结果集映射query.setResultSetMapping("noteAnduthor");query.list();

setResultSetMapping的解释如下(不推荐):

First, in SQL you have to write the name of the table, not the entity name.Second, your JOIN sentence could be invalid at SQL. There are a few ways to implement a join. I'll take the direct approach (select from both table and stating the join at the where clause).Suposing that the person entity maps a table called "TABLE_PERSON", and address maps table "TABLE_ADDRESS", a valid query would look as follows:SELECT person.NAME, person.AGE, person.SEX, address.STREET, address.CITY, address.STATE, address.ZIP
FROM TABLE_PERSON person, TABLE_ADDRESS address
WHERE person.ID = address.PERSON_ID
One more point. Checking the hibernate documentation, I have found this example:List cats = sess.createSQLQuery("select {cat.*}, {kitten.*} from cats cat, cats kitten
where kitten.mother = cat.id").setResultSetMapping("catAndKitten").list();
So, maybe the problem is not at the query itself, but on the resultSet Mapping you are using, and the way to reference the fields.Let's suppose this mapping (from the Hibernate doc):<resultset name="personAddress"><return alias="person" class="eg.Person"/><return-join alias="address" property="person.mailingAddress"/>
</resultset>
Then, as the exaple states, your query should define the columns between curly brackets ({}), and using the alias you have defined at the mapping:personList = session.createSQLQuery("SELECT {person.NAME}, {person.AGE}, {person.SEX}, "+"{address.STREET}, {address.CITY}, {address.STATE}, {address.ZIP} "+"FROM TABLE_PERSON person, TABLE_ADDRESS address ""WHERE person.ID = address.PERSON_ID").setResultSetMapping("personAddress").list();
Please, tell me if any of this examples works.

方法三:封装到map集合中,封装到map集合中,如果添加别名必须添加addScalar()为每个字段添加类型限制,不然会报错,对于oracle中某些类型hibernate没有做对应的映射,例如oracle中的NVARCHAR2类型,仍然需要手动添加映射关系,使用addScalar()方法:

Session session = this.getSession();StringBuffer sql = new StringBuffer();sql.append("select distinct business_id as businessId, business_name businessName, proj_id pid from view1 where proj_id =");sql.append(proId);if(busId != null) {sql.append(" and business_id=").append(busId);}Query query = session.createSQLQuery(sql.toString()).addScalar("businessId", Hibernate.LONG).addScalar("businessName", Hibernate.STRING).addScalar("pid", Hibernate.LONG).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);return query.list();

hibernate查询结果映射到实体和map的方法相关推荐

  1. mysql hibernate id generator_Hibernate映射文件id的generator配置方法

    可选的子元素是 一个Java类的名称,用来生成该持久化类实例的唯一标识符.如果这个生成器实例需要某些配置值或者初始化参数,可以使用元素来传递这些参数. 所有的生成器都实现了org.hibernate. ...

  2. hibernate查询缓存_在Hibernate中启用实体和查询缓存

    hibernate查询缓存 1.简介 在我执行过的与性能相关的任务中,这就是其中之一. 令人担心的是,如果对于特定实体每次都调用相同的查询,并且表数据在特定的时隙内不易更改,则我们可以使用Hibern ...

  3. Hibernate多表关联查询记录映射

    通常情况下,单表的查询比较简单,在hibernate中可以将查询记录直接映射到具体的实体类,因为通常会通过JPA注解将数据表和实体类建立映射关系,在查询数据,保存数据时,可以直接操作java实体类,但 ...

  4. Hibernate查询

        9.1  Hibernate数据查询 数据查询与检索是Hibernate的一个亮点.Hibernate的数据查询方式主要有3种,它们是: l         Hibernate Query L ...

  5. Hibernate 查询Criterion数据

    Hibernate查询Criterion数据 最近在项目中使用 Spring 和 Hibernate 进行开发,有感于 Criteria 比较好用,在查询方法设计上可以灵活的根据 Criteria 的 ...

  6. Hibernate查询性能优化技巧

    数据库查询性能的提升也是涉及到开发中的各个阶段,在开发中选用正确的查询方法无疑是最基础也最简单的. SQL语句的优化 使用正确的SQL语句可以在很大程度上提高系统的查询性能.获得同样数据而采用不同方式 ...

  7. 4.Hibernate O/R 映射

    O/R 映射 目前为止我们已经通过应用 Hibernate 见识过十分基础的 O/R 映射了,但是还有三个更加重要的有关映射的话题需要我们更详细的探讨.这三个话题是集合的映射,实体类之间的关联映射以及 ...

  8. (6) Hibernate的集合映射

    转载地址: http://developer.51cto.com/art/201202/314944.htm 本文主要针对Hibernate的Set.List.Array.Map.Bag五个集合映射进 ...

  9. Hibernate框架 主配置文件 Hibernate.cfg.xml 映射配置 说明

    1 主配置文件 Hibernate.cfg.xml 主配置文件中主要配置:数据库连接信息.其他参数.映射信息! 常用配置查看源码: hibernate-distribution-3.6.0.Final ...

最新文章

  1. 李沐团队半年离开六人,MxNet是否英雄落幕?贾扬清:关键能否解决新痛点
  2. IOS7笔记-6、控制器多态性、导航控制器、选项卡栏控制器
  3. 枚举类型enum需要注意的6点!
  4. 经典!MATLAB线性等分linspace()函数,精确等分点数
  5. Java中设计模式之装饰者模式-2
  6. 编译原理笔录(1)-编译程序基本构成
  7. html js不触发_图文详解鼠标事件CSS:hover和JS:mouseover的区别
  8. 如何用js给图片重置宽_如何用js给老婆每天发情话
  9. LeetCode:通过递归方法打印杨辉三角形
  10. 开放大学计算机应用基础第三次,江苏开放大学-计算机应用基础第三次.doc
  11. koa搭建node服务
  12. SN1SLD16 华为SDH全新原包装2xSTM-16光接口板
  13. 程序猿DD元旦送书:第二弹!
  14. 【数据分析与可视化】股票市场分析实战之历史趋势分析
  15. 你应该知道的 89 个操作系统核心概念
  16. 面向无人驾驶 “云端大脑” 可用性的云原生实践
  17. rn源码ios_携程开源RN开发框架CRN
  18. 抖音服务器究竟有多大,为什么能够供那么多人同时刷?
  19. 淘宝天猫各平台APP端页面详情api接口调用
  20. Java关于LocalDate、LocalTime、LocalDateTime类的详细讲解

热门文章

  1. 【泰国留学那些事】水灯节--泰国人极致浪漫的艺术画像
  2. HTTP,TCP,UDP常见端口对照表大全
  3. es6--let和const
  4. 用opencv画一个笑脸的图像
  5. Python数据类型(一)数字类型
  6. android应用的优化建议(转载)
  7. 微信小程序—仿美团酒店入住日期时段选择
  8. c/c++静态变量和静态函数
  9. 硕士阶段学习情况汇总
  10. 最新百度云不限速软件