用于将数据库查询到的数据打包成临时的包装类,结合EL表达式来展示,例如报表什么的。
基本就分两种,写法如下:
hql:Query query = session.createQuery("select id , account , password from User")
.setResultTransformer(new AliasToBeanResultTransformer(U.class))sql:Query query = session.createSQLQuery("select CN_ID as id ,CN_ACCOUNT as account ,CN_PASSWORD as password from TN_USER")
.addScalar("id", Hibernate.INTEGER)
.addScalar("account",Hibernate.STRING)
.addScalar("password",Hibernate.STRING)
.setResultTransformer(Transformers.aliasToBean(U.class));
hibernate4 替代hibernate3 的Hibernate.INTEGER的用法,
例如:
使用方法举例如下:
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;
}
}