使用它们时的注意:
1.Query 没有addScalar()和addEntity()方法,使用Query的子接口SQLQuery才有这两个方法
2.如果查询的结果集的字段为多个,如:
addScalar("sdt", Hibernate.TIMESTAMP)([b]之所以为Date类型的sdt做addScalar操作,是因为不做这个操作的情况下会有时分秒丢失情况的发生[/b]):
addEntity和ResultTransformer 的区别:
addEntity(Class clazz)的参数Clazz必须是被hibernate管理的持久化bean!否则会报[color=red]MappingException: Unknown entity[/color]。如下面代码是不行的(这里的FidsDepfDto是一个不受hibernate管理的非持久化对象(just a dto,not PO!))
而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]
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]