Hi, I have created a custom mapping in my entity classes to map java Date objects to a nonstandard Date object. (JodaTime) This mapping uses a ValueHandler to implement the conversion, and @Strategy annotation on the fields to indicate that this handler should be used.
The conversion works as expected except in queries with MIN or MAX(dateFieldToConvert), where it dies with a ClassCastException in the OpenJPA code without ever attempting to call my handler. Here is the stack trace of the failure: =========================================================== Caused by: java.lang.ClassCastException: Cannot convert object "12/1/12 12:00 AM" of type "class java.sql.Date" into an instance of "class org.joda.time.LocalDate". at org.apache.openjpa.kernel.Filters.convert(Filters.java:336) at org.apache.openjpa.kernel.Filters.convert(Filters.java:265) at org.apache.openjpa.jdbc.kernel.exps.UnaryOp.load(UnaryOp.java:125) at org.apache.openjpa.jdbc.kernel.ProjectionResultObjectProvider.getResultObject(ProjectionResultObjectProvider.java:78) at org.apache.openjpa.kernel.QueryImpl$PackingResultObjectProvider.getResultObject(QueryImpl.java:2075) at org.apache.openjpa.kernel.QueryImpl.singleResult(QueryImpl.java:1330) at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1242) at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1007) at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:863) ... 33 more =========================================================== And here is the ValueHandler implementation code I am using: =========================================================== public class LocalDateValueHandler extends AbstractValueHandler { ... @Override public Object toDataStoreValue(ValueMapping vm, Object val, JDBCStore store) { if (val instanceof LocalDate) { return convertLocalDate((LocalDate) val); } else if (val instanceof String) { return convertLocalDate(format.parseDateTime((String) val).toLocalDate()); } else { return val; } } @Override public Object toObjectValue(ValueMapping vm, Object val) { if (val instanceof Date) { Date date = (Date) val; return new LocalDate(date); } else { return val; } } @Override public Column[] map(ValueMapping vm, String name, ColumnIO io, boolean adapt) { DBDictionary dict = vm.getMappingRepository().getDBDictionary(); DBIdentifier colName = DBIdentifier.newColumn(name, dict != null ? dict.delimitAll() : false); return map(vm, colName, io, adapt); } private Column[] map(ValueMapping vm, DBIdentifier name, ColumnIO io, boolean adapt) { Column col = new Column(); col.setIdentifier(name); col.setJavaType(JavaSQLTypes.SQL_DATE); col.setType(Types.DATE); return new Column[] { col }; } ... } =========================================================== Any help would be appreciated. Thanks, Justin -- View this message in context: http://openjpa.208410.n2.nabble.com/Custom-field-mapping-fails-with-MAX-query-tp7582965.html Sent from the OpenJPA Users mailing list archive at Nabble.com.