解决hibernate自定义别名映射中无效列名的问题
动态指定addScalar
@Override
public List<T> loadBySQL(Class cl ,String sqlString) throws DataAccessException {
//获取cl全部属性
Field[] fields = cl.getDeclaredFields();
SQLQuery createSQLQuery = this.getSession().createSQLQuery(sqlString);
for(int i = 0;i < fields.length;i++){
//获取cl属性类型
Type type = fields[i].getGenericType();
if(type.toString().equals("class java.lang.String")){
createSQLQuery.addScalar(fields[i].getName(),StandardBasicTypes.STRING);
}else if(type.toString().equals("class java.lang.Integer")){
createSQLQuery.addScalar(fields[i].getName(),StandardBasicTypes.INTEGER);
}else if(type.toString().equals("class java.util.Date")){
createSQLQuery.addScalar(fields[i].getName(),StandardBasicTypes.DATE);
}else if(type.toString().equals("class java.lang.Double")){
createSQLQuery.addScalar(fields[i].getName(),StandardBasicTypes.DOUBLE);
}else if(type.toString().equals("class java.lang.Boolean")){
createSQLQuery.addScalar(fields[i].getName(),StandardBasicTypes.BOOLEAN);
}else if(type.toString().equals("class java.lang.Short")){
createSQLQuery.addScalar(fields[i].getName(),StandardBasicTypes.SHORT);
}
}
return createSQLQuery.setResultTransformer(Transformers.aliasToBean(cl)).list();
}
@Override
public CountAsjDTO countAsj(String asjbh) {
StringBuffer hql = new StringBuffer();
hql.append("select ");
hql.append(" (SELECT count(*) FROM Tb_Xw_Jbwzmst WHERE xxsc_pdbz='0') as tbxwjbwzmst");
hql.append(" ,(SELECT count(*) FROM Tb_Xw_Szry WHERE xxsc_pdbz='0') as tbxwszry");
hql.append(" from dual ");
List<CountAsjDTO> loadBySQL = loadBySQL(CountAsjDTO.class,hql.toString());
CountAsjDTO countAsjDTO = null;
if(loadBySQL != null && loadBySQL.size() > 0){
countAsjDTO = loadBySQL.get(0);
}
return countAsjDTO;
}
1,addScalar要设置type不然会报:java.lang.IllegalArgumentException: argument type mismatch