1

アプリを JPA1.0/Hibernate 3.3.2.GA から JPA2.0/Hibernate 3.6.10.FINAL に移行したところ、既存の JPA クエリの 1 つが機能しなくなりました。

クエリは、次のような永続フィールドの値に対する制約を使用します。

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