从JPA1.0迁移到JPA2.0时,什么会导致此JPA日历查询中断?

时间:2012-09-26 22:09:03

标签: hibernate jpa

我刚刚将应用程序从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有变化吗?或者我们之前是否使用过未记录的功能?

0 个答案:

没有答案