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加上新增属性的映射配置)