您的位置:首页 > 数据库

关于Column '*' not found 解决方案 Hibernate使用SQL查询返回实体类型,即返回某个类,或实体类

2011-04-13 12:18 676 查看
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名称。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐