異常org.hibernate.QueryException: could not resolve property的原因

菜雞03號發表於2016-08-28
異常訊息如下:
Exception in thread "main" org.hibernate.QueryException: could not resolve property: deptid of: org.jsoft.vo.Dept
at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:67)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:61)
at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1392)
at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:54)
at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1367)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:457)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumnsUsingProjection(CriteriaQueryTranslator.java:417)
at org.hibernate.criterion.SimpleExpression.toSqlString(SimpleExpression.java:68)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:357)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:113)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:82)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:91)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1578)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)
at org.jsoft.test.UpdateUser.main(UpdateUser.java:18)

這裡,關鍵是“ deptid of: org.jsoft.vo.Dept ”,deptid為資料庫中表的欄位,異常時說在查詢的時候無法解析這個欄位,也就是說這個欄位是錯誤的。

由於MyEclipse能夠進行Hibernate對映,並自動生成持久化類和對應的配置檔案,對於類似於deptid 或者 dept_id中帶有下劃線的欄位,則自動將下劃線去掉,deptid在持久化類中對應屬性為deptId,所以,在Dao中編寫查詢的方法中,必須寫成

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

這裡eq()方法的第一個引數對應於持久化類中的屬性名稱,如果使用下面:

criteria.add(Restrictions.eq("deptId",1);

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

一般地,如果涉及到屬性型別無法解析的異常,可能出現問題的地方有:

資料庫欄位與持久化類對映檔案,以及持久化類檔案中屬性名稱或者型別可能不相匹配;

持久化類對映檔案中屬性型別可能有問題,比如,如果使用Java型別,注意大寫(如type="java.lang.String"),如果使用Hibernate型別,使用小寫(如type="string")。

相關文章