java.lang.IllegalArgumentException:org.hibernate.hql.ast.QuerySyntaxException MS-Sql Server

时间:2016-11-18 07:39:47

标签: java sql-server hibernate jpa

我正在使用hibernate从ms-sql server数据库获取数据。我使用下面的查询从表中检索数据:

"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 未映射[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()

任何人都可以解释查询中的问题,以便我无法从数据库中获取数据。

1 个答案:

答案 0 :(得分:0)

你几乎没有什么根本问题:

(1)未定义Hibernate映射。 Hibernate是一个ORM(对象到关系表映射)框架,您需要在其中明确指定哪个Java类(称为Entity类)映射到哪个Relational表(如Tower_3_EB_kwh)。可以使用Annotations(首选)或xml文件来完成映射。您可以查看here以获取一个简单示例。

(2)完成映射后,您可以使用HQL(Hibernate查询语言,它是SQL语法,但使用java对象/元素名称而不是表名和列名)来运行基本数据库查询。但是,如果要运行需要本机数据库功能的高级SQL查询(如ROUND),则需要使用createSQLQuery("sql");,您可以查看here