java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode

hibernate查询返回

java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode 
 \-[IDENT] IdentNode: 'status'

如图:

1.问题描述:(hibernate&mysql)

①.用hql单独查询字段status时提示如上图的异常;

②.在用sql(createSQLQuery)单独查询时提示如下:

org.hibernate.exception.SQLGrammarException: could not execute query

省略1万个字符......

java.sql.SQLException: Column 'id' not found.

③.在查询所有字段时hql和sql都正常,但是查询出的数据status字段值为空。

2.纠结的排查过程...省略想打自己的冲动描述

①开始以为是少了字段,查javabean...没少;

②然后以为是数据库字段与javanean中的属性不一致,逐个单词对比数据库和javabean中的status..正常;

③再然后缓存都被怀疑了...clean一下tomcat重启、清浏览器缓存重启、重启eclipse、就差没重启电脑了...debug一步步跟着程序...还是一样的结果;

④万能大法...上网借鉴,网上很多,看到的都一一对比,排查过,像连接数据库编码、多表别名问题、字段大小写不一致...还是一样,不想再找了。。。

3.原因:

经过整个重梳流程,发现是因为后期在javabean中新增了一个属性status,数据库也新增了,但是在映射文件中没有配置,导致服务层连接数据库时提示没有该字段异常,或是查出的数据此字段为空.

ps:因为项目代码用了有一段时间了,新增的status属性加上去后一直没用,只是设置值,没取值使用.

4.解决

在javabean对应的映射文件加上新增属性的设置即可(UserVo.hbm.xml加上新增属性的映射配置)