我刚刚将应用程序从JPA1.0 / Hibernate 3.3.2.GA迁移到JPA2.0 / Hibernate 3.6.10.FINAL,我现有的一个JPA查询不再有效。
查询使用对持久字段值的约束,如下所示:
private java.sql.Timestamp birthday;
查询如下:
String qlString = "SELECT u FROM User u WHERE u.birthday BETWEEN :minDate AND :maxDate";
Query query = eMgrTwo.createQuery(qlString);
Calendar minDateCalendar = Calendar.getInstance();
minDateCalendar.set(1970, 4, 29);
Calendar maxDateCalendar = Calendar.getInstance();
maxDateCalendar.set(1970, 6, 29);
query.setParameter("minDate", minDateCalendar, TemporalType.TIMESTAMP);
query.setParameter("maxDate", maxDateCalendar, TemporalType.TIMESTAMP);
List results = query.getResultList();
旧版本的jpa和hibernate,这是有效的。反对,新版本,我得到一个错误抱怨
Exception in thread "main" java.lang.IllegalArgumentException: Parameter value [java.util.GregorianCalendar SNIP SNIP] did not match expected type [java.util.Date]
如果我将代码更改为使用日期而不是日历,则可以使用。我只是想知道为什么以前的代码有效? API有变化吗?或者我们之前是否使用过未记录的功能?