Hello Hibernate experts;
We are new to Hibernate, actually we indented to use it to replace TopLink, but now it seems we're facing a show-stopper.
The versions we're using are as following:
Hibernate Annotations 3.4.0.GA
Hibernate 3.3.0.SP1
Hibernate Commons Annotations 3.1.0.GA
Hibernate EntityManager 3.4.0.GA
The database is IBM DB2 9.5.
The error is as following:
Code:
Hibernate: select * from ( select rownumber() over() as rownumber_, * from cimart.customer_dim where dayofyear(birthday) between dayofyear(CAST(? as date)) and dayofyear(CAST(? as date)) ) as temp_ where rownumber_ <= ?
[WARN] SQL Error: -104, SQLState: 42601
10953 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: -104, SQLState: 42601
[ERROR] DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=*;ver() as rownumber_,;<select_sublist>, DRIVER=3.50.152
10953 [main] ERROR org.hibernate.util.JDBCExceptionReporter - DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=*;ver() as rownumber_,;<select_sublist>, DRIVER=3.50.152
[WARN] SQL Error: -727, SQLState: 56098
10953 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: -727, SQLState: 56098
[ERROR] DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-104;42601;*|ver() as rownumber_,|<select_sublist>, DRIVER=3.50.152
10953 [main] ERROR org.hibernate.util.JDBCExceptionReporter - DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-104;42601;*|ver() as rownumber_,|<select_sublist>, DRIVER=3.50.152
[WARN] SQL Error: -727, SQLState: 56098
10953 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: -727, SQLState: 56098
[ERROR] DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-104;42601;*|ver() as rownumber_,|<select_sublist>, DRIVER=3.50.152
10953 [main] ERROR org.hibernate.util.JDBCExceptionReporter - DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-104;42601;*|ver() as rownumber_,|<select_sublist>, DRIVER=3.50.152
I.e. a basic syntax error in generating a SQL. The method which is being executed is as following:
Code:
public CustomerDim findOneCustomerWhoHasBirthdayThisWeek() {
Date [] daysArray = getStartAndEndDaysOfCurrentWeek();
List<CustomerDim> resultList = em.createNativeQuery("select * from cimart.customer_dim " +
" where dayofyear(birthday) between dayofyear(CAST(?1 as date)) and dayofyear(CAST(?2 as date))", CustomerDim.class)
.setParameter(1, daysArray[0],TemporalType.DATE)
.setParameter(2, daysArray[1],TemporalType.DATE)
.setMaxResults(1)
.getResultList();
if (resultList.isEmpty())
return null;
else
return resultList.get(0);
}
This seems even stranger since a native query is at hand here.
Any suggestions on a ways around this are welcome.
TIA,
Helgi Viggosson.