2016-11-18 163 views
-2

我正在使用hibernate從ms-sql服務器數據庫中獲取數據。我正在使用以下查詢從表中檢索數據:java.lang.IllegalArgumentException:org.hibernate.hql.ast.QuerySyntaxException MS-Sql服務器

"select tw.datestr, Round (tw.s1n301Kwh,0) 
from Tower_3_EB_kwh tw 
order by tw.datestr DESC" 

但我得到這個錯誤:

java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: Tower_3_EB_kwh is not mapped [select tw.datestr, Round (tw.s1n301Kwh,0) from Tower_3_EB_kwh tw order by tw.datestr DESC]

我使用Hibernate的代碼來獲取從表中的數據:

String queryString = "select tw.datestr, Round (tw."+columnName.toLowerCase()+"Kwh"+",0) 
    from "+"Tower_"+blockName.substring(blockName.length() - 1)+"_EB_kwh tw 
    order by tw.datestr DESC"; 

Query query = entityManager.createQuery(queryString);   
List< "?" > list = query.setMaxResults(1).getResultList() 

任何人都可以解釋查詢中的問題,以便我不能從數據庫中獲取數據。

+0

Tower_3_EB_kwh不是一個有效的類名..請遵循命名約定,代碼 – Jobin

+0

@喬賓有需要的類名Tower_3_EB_kwh –

+0

是的。您需要一個將表列映射到類屬性的類。 – Jobin

回答

0

你有幾個基本問​​題:

(1)Hibernate映射沒有定義。 Hibernate是一個ORM(對象到關係表映射)框架,您需要在其中明確指定哪個Java類(稱爲Entity類)映射到哪個關係表(如Tower_3_EB_kwh)。映射可以使用Annotations(更喜歡這個)或xml文件來完成。你可以看一個簡單的例子here。 (2)一旦你完成了映射,你可以使用HQL(Hibernate查詢語言,它是SQL像語法,但使用java對象/元素名稱而不是表名和列名)來運行基本的數據庫查詢。但是,如果你想運行需要本地數據庫功能的高級SQL查詢(比如你的ROUND),你需要使用createSQLQuery("sql");,你可以看看here