1

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

4

0 回答 0