看起来SqlQuery只支持以select *
开头的sql?它不支持其他仅选择某些列的sql
select id, name from person
并将列映射到相应的POJO?
如果我使用SqlFieldQuery运行sql,结果是List的QueryCursor(每个List包含一个结果记录)。但是如果sql以select *
开头,则此列表的内容将与字段查询不同,如:
select id,name,age from person
对于select *
,每个List由3部分构成:
第一个元素是缓存的关键
第二个元素是包含数据的pojo对象
拖尾元素是每列的值。
为什么这么设计?如果我不知道SqlFieldsQuery运行的sql是什么,那么我需要额外的努力来弄清楚List包含的内容。
答案 0 :(得分:1)
SqlQuery
返回键和值对象,而SqlFieldsQuery
则允许选择特定字段。使用哪一个取决于您的使用案例。
目前select *
确实包含预定义的_key
和_val
字段,将来会有所改进。但是,通常在运行SQL查询时列出要获取的字段是一种很好的做法(对于任何SQL数据库都是如此,不仅仅是Ignite)。这样,例如,在更改模式的情况下,您的代码将受到保护,免受意外行为的影响。