hibernate 使用sql 查询(setResultTransformer)

使用方法举例如下:

public List findByOid(Object oid) {
  log.debug("finding all WatershedAnalyse instances");
  Session session=getSessionFactory().openSession();
  SQLQuery query=null;
  try {
   String queryString = "SELECT oid,bdatetime,basin_code,p,e FROM basin_in WHERE oid="+oid;
   query=session.createSQLQuery(queryString);
   query.addScalar("oid", Hibernate.INTEGER);
   query.addScalar("bdatetime", Hibernate.STRING);
   query.addScalar("basin_code", Hibernate.STRING);
   query.addScalar("p", Hibernate.DOUBLE);
   query.addScalar("e", Hibernate.DOUBLE);

query.setResultTransformer(Transformers.aliasToBean(BasinIn.class));  
   return query.list();
  } catch (RuntimeException re) {
   log.error("find all failed", re);
   throw re;
  }finally{
   session.close();
  }
 }

使用setResultTransformer  要使用query.addScalar("oid", Hibernate.INTEGER)指定
返回类型 否则会抛出以下异常。

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

BasinIn  bean如下

public class BasinIn  implements java.io.Serializable {
     private Integer oid;
     private String bdatetime;
     private String basin_code;
     private Double p;
     private Double e;
    public BasinIn() {
    }

public String getBasin_code() {
 return basin_code;
}

public void setBasin_code(String basin_code) {
 this.basin_code = basin_code;
}

public Integer getOid() {
 return oid;
}

public void setOid(Integer oid) {
 this.oid = oid;
}

public Double getP() {
 return p;
}

public void setP(Double p) {
 this.p = p;
}

public Double getE() {
 return e;
}

public void setE(Double e) {
 this.e = e;
}

public String getBdatetime() {
 return bdatetime;
}

public void setBdatetime(String bdatetime) {
 this.bdatetime = bdatetime;
}

}

时间: 2024-10-06 18:30:11

hibernate 使用sql 查询(setResultTransformer)的相关文章

使用hibernate原生sql查询,结果集全为1的问题解决

问题如下: String sqlTest ="select summary,summaryno from F_Summary"; List<Map<Object, Object>> listTest = this.getService().getListBySql(sqlTest); for (Map<Object, Object> m : listTest) { for (Object k : m.keySet()) { System.out.pr

Hibernate应用SQL查询返回实体类型

Hibernate应用SQL查询返回实体类型 Hibernate使用SQL查询返回实体类型 以前,使用SQL查询,结果放在 RS 结果集中,还要去转换影射到Java类中.Hibernate中,可以自动帮我们注入到Hibernate 甚至是 非 Hibernate 类型当中. String sql = "select * from T_TMP_PUBLIC_POLICY TP"; SQLQuery sqluery = session.createSQLQuery(sql).addEnti

关于用Hibernate执行sql查询,字符字段类型只返回第一个字节的问题

关于用Hibernate执行sql查询,字符字段类型只返回第一个字节的问题 今天遇到了一个问题,就是在Hibernate中,我用sql去查询mysql数据库里面的user表里面的username字段,但是发现查出来的数据都是只有第一个字,例如:在user表里面的username字段中有一条数据是:"Chen chiwei",查询后返回的结果却是这条数据的第一个字母:"C":于是乎,我查了一下user这张表的设计,发现username这个字段的类型是'char'类型,

Hibernate原生SQL查询多表关联,SQL语句要注意的问题

Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Question 和 Answer分别对应数据表 question 和answer. 并且表 question 和answer 的字段大部分都一样,字段数目也一样. 执行如下的操作: 1> 使用hibernate 使用原生SQL查询, Query q = session.createSQLQuery(sql).

Hibernate之SQL查询

Hibernate支持使用原生的SQL语句进行查询.使用原生的SQL的好处是:可以利用某些数据库的特性(不同的数据库SQL 语法会有所差异), 将原有的使用JDBC作为持久层技术的应用 ,迁移到使用Hibernate作为持久层技术. 我们知道 使用HQL查询 主要牵涉的是 Query接口,而使用SQL查询 主要牵涉的 是 SQLQuery接口  . 而SQLQuery接口 是 Query接口的子接口. 所以 Query接口中的方法 ,均可以在SQLQuery接口中使用 ,SQLQuery接口还多

关于hibernate纯sql查询返回结果集的问题(hbm.xml中不写多表关联)

相信用过hibernate的兄弟们都会因为多表复杂查询后,为返回的结果如何组装到一个VO中而烦恼不已.我也不停的为此而烦恼,但是在看了hibernate的transform后,感觉这个方法还挺管用的.      例如现在有两张表,一张是user表,放了一些用户的信息,另外一张表是用户发表的帖子,里边有一个user的外键.我们需要查询出来,某个人发布的帖子,sql如下: Java代码  select u.userName,p.title,p.addTime from user as u,post

Hibernate动态SQL查询

一.需求背景 给hibernate插上ibatis动态查询的翅膀,既保留crud的简洁性,又能收获ibatis的特性. 二.ibatis的动态查询 1 <select id="findUser" resultClass="User"> 2 SELECT * From User 3 <dynamic prepend="WHERE"> 4 <isNull property="id"> 5 id

Hibernate用Sql查询封装到实体类

Hql查询语句可以自动封装到实体类中,但是sql语句需要用到方法才可以 1 @Override 2 @SuppressWarnings("unchecked") 3 public <T> Pagination<T> getPageResultObjectParamsBySql(Class<T> clazz, 4 String hql, int pageNo, int pageSize, 5 Object[] param) 6 throws Runti

hibernate sql查询后对象转换成实体类

在多表查询的时候使用hibernate的sql查询的时候,一般返回的是object[]数组,或者可以使用 session.createSQLQuery(sql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);     session. session.createSQLQuery(sql).addEntity(entity.class); /**     * 分页查询sql,sql语句不包含起始记录数和查询记录数     * @pa