Давайте определим «pojo» с одним полем класса java.util.Date
, приемлемым для запросов Ignite SQL:
public class TimeHolder {
@QuerySqlField
public Date date;
public TimeHolder(Date date) {
this.date = date;
}
}
Теперь создайте кеш зажигания и запросите его через SQL:
final IgniteCache<Integer, TimeHolder> timeCache = ignite.getOrCreateCache(...);
timeCache.put(1, new TimeHolder(new Date()));
final FieldsQueryCursor<List<?>> queryCursor = timeCache.query(new SqlFieldsQuery("select * from TimeHolder"));
final List<?> timeHolderFields = queryCursor.iterator().next();
final Object dateField = entityFields.iterator().next();
assert theOnlyField.getClass() == java.sql.Timestamp.class;
Оказывается, что Object dateField
не является java.util.Date
, как заявлено, но java.sql.Timestamp
.
Я полагаю, что удержание даты в виде java.sql.Timestamp
где-то во внутренних органах H2 помогает при обработке предложений SQL. Но почему он выбрасывается наружу вместо объекта объявленного и ожидаемого класса?
И более важный вопрос:
Где я могу найти достоверный список всех этих конверсий?
UPDATE. Ответы на вопросы в комментарии