Apache按日期点燃过滤查询

时间:2016-09-07 16:55:40

标签: sql ignite

在我的缓存课程中,我将 factorDate 作为 Joda DateTime 对象

@QuerySqlField(index = true)
private DateTime factorDate;

我需要在2个日期之间获得所有结果。为此,我有以下代码:

    CacheConfiguration<Integer, MyClass> cfg = new CacheConfiguration<>("myCache");
    cfg.setIndexedTypes(Integer.class, MyClass.class);

    IgniteConfiguration ignitionConfig = new IgniteConfiguration();
    ignitionConfig.setCacheConfiguration(cfg);
    Ignite ignite = Ignition.getOrStart(ignitionConfig);

    IgniteCache<Integer, MyClass> cache = ignite.getOrCreateCache(cfg);

    DateTime startDateObj = DateTimeFormat.forPattern("dd-MMM-yyyy").parseDateTime(startDate);
    DateTime endDateObj = DateTimeFormat.forPattern("dd-MMM-yyyy").parseDateTime(endDate);

    Timestamp startTimeStamp = new Timestamp(startDateObj.getMillis());
    Timestamp endTimeStamp = new Timestamp(endDateObj.getMillis());

    StringBuilder builder = new StringBuilder();
    builder.append(" SELECT factorDate, name FROM MyClass ");
    builder.append(" WHERE factorDate >= ? AND factorDate <= ? ");
    builder.append(" AND name = ? ");

    SqlFieldsQuery qry = new SqlFieldsQuery(builder.toString());

    qry.setArgs(startTimeStamp, endTimeStamp, "Jack Jones");
    List<List<?>> res = cache.query(qry).getAll();

当我知道有结果时,我没有得到任何结果。有什么想法吗?

我也尝试使用 DateTime对象而不是timestamp作为查询参数,但仍然没有运气

1 个答案:

答案 0 :(得分:1)

默认二进制格式不支持自定义Comparable类。作为解决方法,您可以尝试使用OptimizedMarshaller代替:

<property name="marshaller">
    <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller"/>
</property>

但请注意,它会反序列化服务器节点上的键和值,因此您必须确保在那里部署类。