異常org.hibernate.QueryException: could not resol...

異常消息以下所示:
嚴重: Servlet.service() for servlet action threw exception
org.hibernate.QueryException: could not resolve property: roleId of: com.sidi.vo.Roleitem [update com.sidi.vo.Roleitem ri set ri.isShow = '0' where ri.roleId=?] java

org.hibernate.QueryException: could not resolve property: task_no of: edu.cust.entity.Task
對應的語句是dao中的更新方法
String queryString = "update Roleitem ri set ri.isShow = '0' where ri.roleId=?";

這個地方的roleId是在roleitem表中的,但只是此表的一個外鍵,因此應該寫成
String queryString = "update Roleitem ri set ri.isShow = '0' where ri.role.roleId=?";
問題解決!!
===================================這是別人的一個例子=============== 數據庫

at org.hibernate.persister.entity.AbstractPropertyMapping.throwPropertyException(AbstractPropertyMapping.java:43)
這裏,關鍵是「task_no of: edu.cust.entity.Task」,task_no爲數據庫中表的字段,異常時說在查詢的時候沒法解析這個字段,也就是說這個字段是錯誤的。 app

因爲Eclipse可以進行Hibernate映射,並自動生成持久化類和對應的配置文件,對於相似於task_no中帶有下劃線的字段,則自動將下劃線去掉,task_no在持久化類中對應屬性爲taskNo,因此,在Dao中編寫查詢的方法中,必須寫成 spa

criteria.add(Restrictions.eq("taskNo",task.getTaskNo())); hibernate

這裏eq()方法的第一個參數對應於持久化類中的屬性名稱,若是使用下面: ip

criteria.add(Restrictions.eq("task_no",task.getTaskNo())); get

就可能發生上面的異常,千萬要當心。 servlet

通常地,若是涉及到屬性類型沒法解析的異常,可能出現問題的地方有: string

數據庫字段與持久化類映射文件,以及持久化類文件中屬性名稱或者類型可能不相匹配; it

持久化類映射文件中屬性類型可能有問題,好比,若是使用Java類型,注意大寫(如type="java.lang.String"),若是使用Hibernate類型,使用小寫(如type="string")。

相關文章
相關標籤/搜索