#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 это работает