2016-04-01 13 views
0

MS SQL Server 2012でHibernateでnamedQueriesを使用するPOCを試していて、Reminder.hbm.xml構成で次のように設定しました。* .hbm.xmlファイルで宣言されたnamedQueryでSPを実行できません

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

と私はこのようなとしてのJavaクラスから上の名前付きクエリを呼び出すためにしようとしている:後

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

は私としてストアドプロシージャに置かれている単一のSQL文でありますクエリ自体を実行できませんでした。ここにストアドプロシージャのコードがあります。

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE FetchDOBsBasedOnDate 
@InputDate DATETIME 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT * FROM Reminders WHERE DATEADD(year, DATEDIFF(year, BirthDate, @InputDate), BirthDate) = @InputDate 
END 
GO 

問題は、SPが完全に動作するようにHibernateからこのSPを実行する際にエラーが発生しているということです。私は私のコンソール上に表示されるエラー:

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:paranthesisを退治した後 、SQL構文エラーが抑制されているが、私はまだ結果が届きません。

答えて

1

あなたdon't want parentheses around your stored procedure parameter list。試してみてください:

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

をあなたはいつもそれが有効だかどうかを確認するために、SQL Server Management StudioのようなスタンドアロンのクライアントからあなたのSQLを試してみることができます忘れないでください。

また、時間コンポーネントを含む日付を使用しているようです(使用しているクラスはあまり分かりませんが、java.util.Dateの場合はミリ秒の精度で時刻も格納されます) 。)Javaコードからパラメータ値を出力して、照会しているものを正確に表示したり、あらゆる種類の照会ログを有効にできますか?私はあなたの誕生日が正確にミリ秒の時点にある人を探しているかもしれないと感じています。おそらくあなたのデータベースには見つからないでしょう。

+0

あなたの提案は、SQL構文エラーを抑制するのに役立ちましたが、私はまだHibernateを使ってストアドプロシージャを実行することができません...( –

+0

あなたは、エラーメッセージを含むあなたの現在の問題それは働いていないなど –

+0

私はスタンドアロンクライアント上で私のストアドプロシージャをテストして、それは完全に動作していますが、私がHibernateを介して呼び出しようとしているときに結果を出すものではありません! –

関連する問題