2016-04-01 16 views
0

MS SQL Server 2012'de Hibernate'te namedQueries kullanmak için bir POC deniyorum ve aşağıdaki Reminder.hbm.xml yapılandırmamda yapılandırdım. * .hbm.xml dosyasında bildirilen bir namedQuery aracılığıyla bir SP çalıştırılamıyor

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

ve böyle bir Java sınıfından yukarıda adı sorgu çağırmak çalışıyorum:

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

ardından ben I gibi bir saklı yordam koydum tek bir SQL ifadesini olduğunu sorguyu kendisi çalıştıramadı, burada saklı yordamın kodu.

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 

Sorun, nerede SP eser olarak tamamen hazırda ile bu SP yürütülürken bir hata alıyorum olmasıdır. Benim konsolda bkz Hata:

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

DÜZENLEME: Parantez kurtulduktan sonra SQL sözdizimi hataları baskılanır ama hala sonuç alamıyorum.

cevap

1

Siz don't want parentheses around your stored procedure parameter list. Deneyin:

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

hep geçerli olup olmadığını görmek için SQL Server Management Studio gibi bağımsız bir istemciden SQL deneyebilir unutmayın.

Ayrıca, bir zaman bileşeni ile bir tarih kullanıyor gibi görünüyorsunuz (Kullandığınız sınıflar hakkında pek bir şey bilmiyorum, ancak bu java.util.Date ise, zaman da, milisaniye hassasiyetle depolar. .) Tam olarak neyi sorguladığınızı görmek için herhangi bir sorgu günlüğünü açabilir veya parametre kodunu Java kodunuzdan yazdırabilir misiniz? Doğum günlerinde tam zamanında milisaniye noktası olan insanlara bakabileceğinizi düşündüğüm bir şey var, bu da muhtemelen veritabanınızda bulunmayacaktır.

+0

öneriniz SQL sözdizimi hatasını bastırmama yardımcı oldu, ancak hala Hazırda Bekletme Yöntemini kullanarak Hazırda Beklet işlemini yürütemiyorum ... :( –

+0

Sorunuzu, hata iletilerini de içeren güncel sorunlarınızı yansıtacak şekilde değiştirmelisiniz. Çalışmıyor, vb. –

+0

Saklı yordamımı tek başına bir istemcide denedim ve mükemmel çalışıyor, ancak hazırda bekletmeye çalıştığımda bir sonuç vermiyor.! –

İlgili konular