SSH整合報錯:org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped[......]


非常詭異的報錯,信息如下:
org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped [select count(*) from User u where u.userName=? and u.userPassword=? ]
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped
類似的報錯信息的解決方法,我也是研究了半天才最后發現問題
出現這中錯誤情況有兩種

1,配置文件沒有加載到hibernate的實體列表里面

2,映射文件的字段與數據庫字段不一致,或者名稱不一致導致

hql 是 有專門的語法的。 不是sql。你把hibernate方言設置成你用的數據庫。
sql的語法和hql不是一回事。
......QuerySyntaxException...是說,你要的sql不是hql,語法錯誤。。

1.看是否忘記將hibernate的映射文件添加到Hibernate.cfg.xml(使用Hibernate時)或者applicationContext.xml中

2.檢查表中的字段和映射文件中的字段是否一一對應

3.檢查字段名是否使用了數據庫中的關鍵字

4.HQL語句是否正確

HQL: Hibernate 查詢語言Hibernate 配備了一種非常強大的查詢語言,這種語言看上去很像 SQL。但是不要被語法結構上的相似所迷惑,HQL 是非常有意識的被設計為完全面向對象的查詢,它可以理解如繼承、多態和關聯之類的概念。

 

所以這個時候你要認真檢查一下你寫的hql語句,一定是對象查詢,特別是【tableName】 不要寫你要查詢的表,而是查詢的對象

比如:

public long getTypeCount(Patent patent) {
String hqlString = "select count(*) from Patent as p where p.type ='"+patent.getType()+"'";
Query query = this.getSession().createQuery(hqlString);
long count =0;
count = ((Number)query.uniqueResult()).intValue();
return count;
}

Patent  是一個對象

而數據庫的表名是patent   如果寫成String hqlString = "select count(*) from patent as p where p.type ='"+patent.getType()+"'"; 

肯定是查詢不出結果的,切記!

 

如果這篇文章對您有幫助,請隨便打賞一點點,作為鼓勵,非常感謝您!!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM