Исключение InvalidQueryException для запроса в столбце даты: невозможно создать unsigned int (для даты) из: ‘1601856000000’

#scala #cassandra #phantom-dsl

#scala #кассандра #phantom-dsl

Вопрос:

С тех пор, как мы обновились до Scala 2.13, запросы, которые обращаются к столбцу даты в Cassandra, завершаются ошибкой с исключением: невозможно создать unsigned int (для даты) из: ‘1601856000000’

Это значение, очевидно, слишком велико, чтобы поместиться в unsigned int . И согласно документации Cassandra, date хранится как unsigned int, представляющий days-since-epoch

Но когда я заглядываю в код phantom-dsl DateSerializer, я вижу, что он намеренно принимает значение millisSinceEpoch из всех поддерживаемых типов дат, которое является значением в исключении

Столбец: object date extends DateColumn with ClusteringOrder with Descending

Запрос / метод:

     select
      .where(_.userId eqs userId)
      .and(_.date gte startDate)
      .fetch()(implicitly, executionContext)
  

Phantom-dsl версия 2.59.0

Уже пытался использовать LocalDate (та же проблема) и представлять столбец как StringColumn, что работает для запроса, если я форматирую дату в ГГГГ-ММ-дд, но тогда значение из результирующего набора не может быть преобразовано в дату

Чего мне здесь не хватает?

Комментарии:

1. К вашему сведению, StartDate — это java.util . Объект даты

2. Согласно phantom docs, вы должны придерживаться java.util.Date. Либо вы использовали DateTime, либо phantom по какой-то причине выбирает неправильное неявное преобразование. Если вы предоставляете собственные конвертеры, то, возможно, вы случайно предоставили что-то, что переопределило значение по умолчанию?

3. Я использую java.util. Дата и не имеют собственных преобразователей. Конвертеры в phantom-dsl, похоже, используют millis, поэтому я бы на самом деле рассмотрел пользовательский конвертер, но в этом не должно быть необходимости

4. Согласно фантомной документации DateColumn сопоставляется с отметкой времени, такой же, как DateTimeColumn outworkers.github.io/phantom/basics/primitives.html итак, поведение, которое вы описываете, кажется правильным, но тогда почему оно работало до обновления. Возможно, авторы phantom объяснят, что происходит github.com/outworkers/phantom/issues . В списке изменений перечислены некоторые изменения в обработке даты

Ответ №1:

Через некоторое время коллега предложил решение: если вы определяете столбец как com.datastax.driver.core.LocalDate это работает