您的位置:首页 > 产品设计 > UI/UE

hibernate (SQLQuery)query.setResultTransformer

2012-07-08 22:07 585 查看
转自:http://yyq2007aa.blog.163.com/blog/static/4418160920098293528586/  

使用hibernate中sql查询:

在使用这个方法时总会报错:

   String sql="select id, name, price from product";                               //id的DB类型为bigint    sqlserver 2000

   Query query = session.createSQLQuery(sql);                                 

    List list = query.setResultTransformer(

      Transformers.aliasToBean(ProductInfo.class))                               //VO ProductInfo的id类型是Long

      .setFirstResult(first).setMaxResults(size).list();

这样子使用会有问题,错误如下:

Caused by: org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.serialssoloutions.database.entity.ProductInfo.id

    Caused by: java.lang.IllegalArgumentException: argument type mismatch

在指定返回的类型后这个错误就不存在了.

    SQLQuery query = session.createSQLQuery(sql);

    query.addScalar("id", Hibernate.LONG);
    List list = query.setResultTransformer(

      Transformers.aliasToBean(ProductInfo.class))

      .setFirstResult(first).setMaxResults(size).list();

蓝色的部分是关键部分,在这样使用的时候最好是把所有返回的类型都指定了.

query.setResultTransformer(Transformers.aliasToBean(ProductInfo.class))
返回一个实体

query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)返回一个Map:为DB中名称一致(大小写一致)遍历list时就可以对象

Map map = (Map)list.get[i];

map.get("id");map.get("name");来取值。按你的SQL语句select后的字段名来作为map的Key,但这个key必须与数据库中的字段名一模一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息