2016-09-07 3 views
0

В моем классе кэш у меня factorDate как Joda DateTime объектаApache воспламенить фильтрации запросов по дате

@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 объекта вместо метки в качестве аргумента запроса, но до сих пор не повезло

ответ

1

По умолчанию двоичного формата не поддерживает пользовательские Comparable классов. В качестве временного решения можно попробовать использовать вместо OptimizedMarshaller:

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

Но обратите внимание, что это будет десериализация ключи и значения на серверных узлах, так что вы должны убедиться, что классы размещены там.

+0

Можете ли вы подробнее рассказать о второй части, пожалуйста? – Julian

+0

Игнорировать хранит данные в двоичном формате по умолчанию. Он позволяет запускать SQL-запросы без десериализации (поэтому 'Comparable' также игнорируется). Если используется 'OptimizedMarshaller', объекты будут десериализованы на стороне сервера, и эти десериализованные объекты будут использоваться для получения значений полей. –