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