2016-04-01 3 views
0

ausgeführt auszuführen Ich probiere ein POC, um namedQueries in Hibernate auf MS SQL Server 2012 zu verwenden und in meiner Reminder.hbm.xml Konfiguration konfiguriert haben.Nicht möglich, einen SP über eine namedQuery in * .hbm.xml-Datei

<hibernate-mapping> 
    <class name="com.reminder.hibernate.model.Reminder" table="Reminders"> 
    ... 
    ... 
    </class> 

    <sql-query name="fetchDOBsBasedOnDate"> 
     <return alias="reminder" class="com.reminder.hibernate.model.Reminder"/> 
     <![CDATA[EXEC FetchDOBsBasedOnDate(:birthDate)]]> 
    </sql-query> 

</hibernate-mapping> 

und ich versuche, die oben genannte Abfrage aus einer Java-Klasse als so zu nennen: ist

Query query = session.getNamedQuery("fetchDOBsBasedOnDate").setDate("birthDate", new Date(new java.util.Date().getTime())); 
//Used java.sql.Date above 

Im Anschluss an die einzelne SQL-Anweisung, die ich in einer gespeicherten Prozedur wie ich gesetzt habe konnte die Abfrage selbst nicht ausführen, hier ist der Code für die gespeicherte Prozedur.

Problem ist, dass ich einen Fehler bekomme, diesen SP durch Hibernate auszuführen, wo der SP zusammen funktioniert. Fehler, die ich auf meiner Konsole sehen:

Hibernate: EXEC FetchDOBsBasedOnDate(?) 
1 Apr, 2016 3:48:14 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
WARN: SQL Error: 102, SQLState: S0001 
1 Apr, 2016 3:48:14 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
ERROR: Incorrect syntax near '@P0'. 

EDIT: Nach der geklam- mert loszuwerden, werden unterdrückt SQL-Syntax-Fehler, aber ich bin immer noch nicht die Ergebnisse zu bekommen.

Antwort

1

Sie don't want parentheses around your stored procedure parameter list. Versuchen:

<![CDATA[EXEC FetchDOBsBasedOnDate :birthDate]]> 

Vergessen Sie nicht, dass Sie immer Ihre SQL-out von einem eigenständigen Client wie SQL Server Management Studio versuchen, um zu sehen, ob es gültig ist.

Auch scheinen Sie ein Datum mit einer Zeitkomponente zu verwenden (ich weiß nicht viel über die Klassen, die Sie verwenden, aber wenn das java.util.Date ist, speichert es auch Zeit mit Millisekunden-Genauigkeit .) Können Sie den Parameterwert aus Ihrem Java-Code drucken, um genau zu sehen, was Sie abfragen, oder jede Art von Abfrageprotokollierung aktivieren? Ich habe das Gefühl, dass Sie nach Leuten suchen können, deren Geburtstage an einem genauen Millisekunden-Zeitpunkt während des Tages liegen, der vermutlich nicht in Ihrer Datenbank gefunden wird.

+0

Ihr Vorschlag hat mir geholfen, den SQL-Syntaxfehler zu unterdrücken, aber ich bin immer noch nicht in der Lage, die gespeicherte Prozedur mit Hibernate auszuführen ... :( –

+0

Sie sollten Ihre Frage ändern, um Ihre aktuellen Probleme, einschließlich Fehlermeldungen, wie Sie wissen es funktioniert nicht, etc. –

+0

Ich habe meine gespeicherte Prozedur auf einem eigenständigen Client getestet und es funktioniert einwandfrei, gibt aber kein Ergebnis, wenn ich versuche, Hibernate aufzurufen.! –

Verwandte Themen