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)([b]之所以为Date类型的sdt做addScalar操作,是因为不做这个操作的情况下会有时分秒丢失情况的发生[/b]):
this.getSessionFactory().getCurrentSession().createSQLQuery(sql)
.addScalar("sdt", Hibernate.TIMESTAMP)
.setResultTransformer(Transformers.aliasToBean(FidsDepfDto.class))
.list();
则返回的FidsDepfDto 的list结果集中,将只用sdt有值,其他都为null!所以,[b]在使用addScalar()时,select的每个字段都必须要addScalar()![/b]


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

而ResultTransformer可以接受一个任意的bean,只要这个bean的属性(严格说是setXxx()中的xxx)与select的结果集列名存在对应关系:
[url]http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html#d0e13904[/url][quote]It is possible to apply a ResultTransformer to native SQL queries, allowing it to return non-managed entities.[/quote]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值