2016-11-18 4 views
-2

ich überwintern verwende für Daten aus MS-SQL-Server-Datenbank holen .Ich unten Abfrage bin mit Daten aus der Tabelle abgerufen werden, wie:java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException MS-SQL-Server

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

Aber ich habe diesen Fehler:

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]

ich Hibernate Code bin mit Daten aus der Tabelle zu holen wie:

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() 

Kann jemand erklären, was das Problem in der Abfrage ist, so dass ich nicht in der Lage bin, Daten aus der Datenbank abzurufen.

+0

Tower_3_EB_kwh ist keine gültige Klassennamen .. folgen Sie bitte die Namenskonvention beim Schreiben Code – Jobin

+0

@Jobin dort ist der Klassenname Tower_3_EB_kwh –

+0

ja. Sie benötigen eine Klasse mit den Tabellenspalten, die den Klasseneigenschaften zugeordnet sind. – Jobin

Antwort

0

Sie haben einige grundlegende Probleme bekam:

(1) Hibernate Mappings sind nicht definiert. Hibernate ist ein ORM-Framework (Object to Relational tables Mapping), in dem Sie eindeutig angeben müssen, welche Java-Klasse (mit der Bezeichnung Entity-Klasse) der relationalen Tabelle zugeordnet ist (wie Tower_3_EB_kwh). Die Zuordnungen können entweder mithilfe von Annotationen (bevorzugen Sie dies) oder XML-Dateien erfolgen. Sie können here für ein einfaches Beispiel suchen.

(2) Sobald Sie mit den Zuordnungen fertig sind, können Sie HQL (Hibernate Query Language, SQL-Syntax, aber Java-Objekt-/Elementnamen anstelle von Tabellennamen und Spaltennamen) verwenden, um die grundlegenden Datenbankabfragen auszuführen . Aber, wenn Sie erweiterte SQL-Abfragen ausführen möchten, die native Datenbank-Funktionen benötigen (wie Ihre ROUND), müssen Sie createSQLQuery("sql"); verwenden, Sie here aussehen kann

Verwandte Themen