hibernate 自定义结果集

hibernate  中,有时候需要比较复杂的业务,比如需要从很多张表里面抽取数据,这时候就需要我们自定义结果集了。

 

假设:我需要分别从 7张表里面 分别取 a,b,c,d,e,f,g,h 字段。在原先的映射文件不满足的情况下,我建立了含有这些字段的实体bean.

 

1.Dao 的写法:

 

String sql = "...";
Session session = super.getSessionFactory().getCurrentSession();
SQLQuery query= session.createSQLQuery(sql.toString());
query.setResultTransformer(Transformers.aliasToBean(bean.class));//自定义bean

 

2. 当然这只是一种我比较喜欢的方式,hibernate 还提供了很多,具体请参与hibernate 的官方文档: Native SQL查询

 

3.值得注意的是Oracle 有些返回方式比较不一致,有些默认返回大写字段了,就会找不到Setter 方法。

  处理办法是:

  

Query query = getCurrentSession().createSQLQuery(sql)
		.addScalar("poNumber").addScalar("你自定义的字段名称");

还有一种:

select 
po_number \"po_number\",
payment_id \"payment_id\",
sum(invoice_amount) \"total_money\" 
from table;

经过转义一下,第一种不方便封装。第二种可读性差了。自己感觉吧。

还有更好的方式,希望能提供建议。不知道map 方便不。

 

4.在返回类型上,经常会出现 错误。比如 oracle 字段A 类型Number ,你实体定义为Integer 等类型会出错。

   这里解决方法是,定义为Object类型,或者查询A的时候 加上||‘’,强制返回字符串。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值