sql为select a.*, b.id as childId, b.childName from a,b where a.id = b.id
当遇到Column '*' not found找不到的时候,首先检查该字段是否存在,如果存在还有这个错误,有两种解决办法
第一种:有可能是你的*字段取了别名,那么在查询的时候一定要指定改别名的类型,为已经存在的别名指定数据类型。只需要为最外层的有别名的字段指定类型即可。代码如下:
SQLQuery query = session.createSQLQuery(sql).addScalar("别名", Hibernate.INTEGER);//指定别名的数据类型//多个别名可以连续写多个如:session.createSQLQuery(sql).addScalar("别名", Hibernate.INTEGER).addScalar("别名1",Hibernate.INTEGER);
第二种:将返回结果映射到具体的类。可以是实体类,也可以是普通的pojo类。查询代码如下:
Query query = session.createSQLQuery(sql.toString()).setResultTransformer(Transformers.aliasToBean(CheckInfo.class));//CheckInfo为pojo类
SQLQuery sqluery = session.createSQLQuery(sql).addEntity(User.class);//User为实体类,对应数据库的某个表
如果存在返回多个实体的情况:
session.createSQLQuery("SELECT {user.*}, {role.*} FROM user u, role r WHERE u.roleId= r.id") .addEntity("user", User.class) .addEntity("role", Role.class) {user.*}的user就是 addEntity("user", User.class)里面的user名称。