【发布时间】:2016-07-21 02:54:10
【问题描述】:
我正在尝试使用 POC 在 MS SQL Server 2012 上的 Hibernate 中使用 namedQueries,并在我的 Reminder.hbm.xml 配置中配置了以下内容。
<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
问题是,我通过 Hibernate 执行此 SP 时遇到错误,因为 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'.
编辑: 去掉括号后,SQL语法错误被抑制了,但我仍然没有得到结果。
【问题讨论】:
标签: java sql-server hibernate stored-procedures