相信用过hibernate的兄弟们都会因为多表复杂查询后,为返回的结果如何组装到一个VO中而烦恼不已。我也不停的为此而烦恼,但是在看了hibernate的transform后,感觉这个方法还挺管用的。
例如现在有两张表,一张是user表,放了一些用户的信息,另外一张表是用户发表的帖子,里边有一个user的外键。我们需要查询出来,某个人发布的帖子,sql如下:
select u.userName,p.title,p.addTime from user as u,post as p where u.id=p.userId
但是我们的POJO映射仅仅是做了user,post表的映射,这个时候,我们需要写一个PostVO类,里边放着了用户的信息和帖子的信息的属性,设置get\set方法,务必保证这个类里边有一个默认的构造函数。
然后我们开始写这个数据库操作的dao,代码如下:
String sql = "select u.userName as userName ,p.title as title ,p.addTime as addTime from user as u,post as p where u.id=p.userId"
Query q = factory.getCurrentSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(PostVO.class));
红字部分必须跟PostVO中的属性一直,这样就可以返回一个针对PostVO的一个集合。
其实大家可以看下hibernate这一部分的源码就会发现,主要是使用了AliasToBeanResultTransformer这个类,通过sql的查询,会返回数组,然后hibernate根据数据表的映射,自动帮我们来set对应的字段属性,所以标红的部分务必要跟VO中的属性值一直,要不然会报错的。
如果需要的话,大家也可以重写这个类。例如VOResultTransformer。然后在dao中更改成
setResultTransformer(new VOResultTransformer(PostVO.class));
即可。
分享到:
相关推荐
3.4.1. SQL Dialects .......................................................................................... 42 3.4.2. Outer Join Fetching ..............................................................
<?xml version="1.0" encoding="UTF-8"?> <!-- - Application context definition for JPetStore's business layer. - Contains bean references to the transaction manager and to the DAOs in - ...
采用jax-ws发布Web Service服务,支持java客户端和.Net客户端调用,数据库采用oracle10g,里面有创建数据库脚本文件createTable_Oracle10g.sql,由于Hibernate映射表中会存在循环引用对象问题,导致序列化失败,所以...
#hibernate.proxool.xml proxool.xml #hibernate.proxool.properties proxool.properties ################################# ### Plugin ConnectionProvider ### ################################# ## use a ...
2、Hibernate 的主要作用是简化应用的数据持久层编程,不仅能管理 Java 类到数 据库表的映射,还提供数据查询和获取数据的方法,从而大幅减少了开发人 员编写 SQL 和 JDBC 代码的时间; 3、Hibernate 框架主要包括...
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE hibernate-configuration (View Source for full doctype...)> - <!-- Generated by MyEclipse Hibernate Tools. --> - <hibernate-configuration> - ...
..........\...\..\..\persist\Xiangmubiao.hbm.xml ..........\...\..\..\.......\Xiangmubiao.java ..........\...\..\..\server\server.java ..........\...\hibernate.cfg.xml ..........\...\struts.xml ...
Hibernate开发jar包 5.07 配置文件内容 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" ...
│ │ hibernate.cfg.xml │ │ struts.xml │ │ │ └─com │ └─aw │ ├─action │ │ BillAction.java │ │ GoodsAction.java │ │ UsersAction.java │ │ │ ├─bean │ │ Bill.hbm.xml...
三、 Hibernate.cfg.xml:hbm2ddl.auto 16 四、 搭建日志环境并配置显示DDL语句 16 五、 搭建Junit环境 16 六、 ehibernate.cfg.xml : show_sql 17 七、 hibernate.cfg.xml :format_sql 17 八、 表名和类名不同,...
1,默认配置为mysql5.0 hibernate.cfg.xml.mssql为Ms sqlserver2000数据库配置文件 hibernate.cfg.xml.oracle为oracle9i数据库配置文件 TblNews.hbm.xml.oracle为oracle9i的tbl_news表映射文件 这些...
所有的数据库表不是用mysql企业管理器或查询分析器来完成的,而是用hibernate的pojo类和hbm.xml文件导入的,然而,配置这些关联映射却很麻烦,往往考虑不到而配置成单向关联,在开发过程中又发现双向关联都用到了,...
自己根据课本总结的使用hibernate时,实体类间映射文件即*.hbm.xml文件的写法。如果你正在学习hibernate,保证会对你有所帮助。
当应用程序调用Session的save()、update()、savaeOrUpdate()、get()或load(),以及调用查询接口的list()、iterate()或filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级...
Hibernate多数据库支持解决方案 一、 去掉数据库级的外键关联 二、 如何动态加载.hbm.xml文件 三、 配置文件的加载 四、 大字段处理 五、 hibernate主键生成器(数值型主键操作方法) 六、 Oracle 转换 SQL Server ...
15.3.4 把多对多关联分解为两个一对多关联 15.4 小结 15.5 思考题 第16章 Hibernate的检索策略 16.1 Hibernate的检索策略简介 16.2 类级别的检索策略 16.2.1 立即检索 16.2.2 延迟检索 16.3 一对多...
1、可以取消hibernate.cfg.xml中<property name="hbm2ddl.auto">create注释创建表结构 2、可以通过src下的db.sql创建表 V2.0版本更新内容 1、添加struts2.1支持 2、修复没查到数据,组显示负数BUG V1.5版更新内容 1...
2.如果找不到,get()会立即发送sql语句到数据库中查找数据,如果找到就返回,如果找不到返回null; load:(使用延迟加载策略) 1.load()方法默认要加载的对象一定存在,所以很放心的使用代理对象,等到用到的时候从...
对 Hibernate 初体验 1.新建一个java工程,...但运行上面的测试类之后,我们查看一下数据库中student表,表中将会多一条数据。 Hibernate的初体验就说到这,相信通过上面的例子,我们对hibernate大致有了一些了解了。
这是Hibernate3引入的新特性,对于包含重量级大数据的表字段,这种抽取方式提高了对大字段操作的灵活性,否则加载Tfile对象的结果集时如果总是返回fileContent,这种批量的数据抽取将可以引起数据库的"洪泛效应"。...