У меня есть хранимая процедура SQL Server, которая выглядит следующим образом:
CREATE PROCEDURE [dbo].[my_stored_procedure]
(
@num INT,
@name VARCHAR(50),
@start_date DATETIME,
@end_date DATETIME
)
AS
BEGIN
...
END
И объект Entity с NamedNativeQuery, который выглядит следующим образом:
@Entity
@NamedNativeQuery(
name = "myObject.myStoredProcedure",
query = "call my_stored_procedure(:num, :name, :start_date, :end_date)",
callable = true,
readOnly=true,
resultSetMapping="implicit"
)
@SqlResultSetMapping(
name="implicit",
entities=@EntityResult(entityClass=org.mycompany.object.MyObject.class)
)
public class MyObject implements Serializable {
...
Но когда я пытаюсь назвать это в моем DAO, вот так:
List<MyObject> objects = (List<MyObject>) getHibernateTemplate().execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException {
return session.getNamedQuery("myObject.myStoredProcedure")
.setInteger("num", num)
.setString("name", name)
.setDate("start_date", startDate)
.setDate("end_date", endDate)
.list();
}
});
Но я получаю эту ошибку:
12 May 2010 10:55:43,040 100833 [http-8080-Processor23] ERROR org.hibernate.util.JDBCExceptionReporter - Invalid parameter index 4.
12 May 2010 10:55:43,042 100835 [http-8080-Processor23] FATAL org.mycompany.web.controller.BasePagingController - org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query
org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query
Кажется, он ожидает другой параметр, например, возвращаемый параметр, но я попытался добавить '?' на вызов, и вся документация Hibernate предлагает против этого.
Любая помощь будет оценена. Спасибо