让我们用Ignite SQL查询可接受的类java.util.Date
的单个字段来定义“ pojo”:
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
。
我猜H2内部结构中某个地方的保留日期为java.sql.Timestamp
有助于处理SQL子句。但是为什么将它扔到外面而不是声明的类和期望类的对象呢?
一个更重要的问题是: 在哪里可以找到所有这些转换的可靠列表?
更新。在评论中回答问题
答案 0 :(得分:0)
java.util.Date
返回SQL(JDBC)字段,而不是对象字段。
{{1}}不是JDBC类型,因此将被转换。我不确定我是否能立即找到完整的列表,但是对于没有对应的JDBC类型的任何类型,您都可以期待转换或错误。
答案 1 :(得分:0)
如果您使用SqlQuery
(而不是SqlFieldsQuery
),则会得到您所期望的POJO。 SqlQuery
始终返回POJO,因此您无法执行加入和分组依据之类的事情。