为了账号安全,请及时绑定邮箱和手机立即绑定

Apache Ignite:sql查询返回未声明类的字段

Apache Ignite:sql查询返回未声明类的字段

侃侃无极 2022-01-19 13:08:53
java.util.Date让我们用Ignite SQL 查询可接受的类的单个字段来定义“pojo” :public class TimeHolder {  @QuerySqlField  public Date date;  public TimeHolder(Date date) {    this.date = date;  }}现在创建 ignite 缓存并通过 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 子句。但是为什么它被扔到外面而不是声明和预期类的对象呢?一个更重要的问题是:我在哪里可以找到所有这些转换的可靠列表?更新。问题在评论中回答
查看完整描述

2 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

如果您使用 a SqlQuery(而不是 a SqlFieldsQuery),您将获得预期的 POJO。SqlQuery总是返回一个 POJO,所以你不能做诸如加入和分组之类的事情。


查看完整回答
反对 回复 2022-01-19
?
湖上湖

TA贡献2003条经验 获得超2个赞

SqlQueryFields 返回 SQL (JDBC) 字段,而不是对象的字段。

java.util.Date不是 JDBC 类型,所以它被转换了。我不确定我是否能够立即找到完整的列表,但是对于没有相应 JDBC 类型的任何类型,您可能会遇到转换或错误。


查看完整回答
反对 回复 2022-01-19
  • 2 回答
  • 0 关注
  • 187 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信