Фантомное сопоставление Java 8 LocalDateTime с Joda Time

Я использую Phantom 1.28 с Cassandra 3.7.

У меня есть кейс-класс с Java 8 LocalDateTime:

case class User(
   verifiedAt: Option[LocalDateTime] = None
)

В фантомной модели:

class UserModel extends CassandraTable[ConcreteUserModel, User]{

object verified_at extends OptionalDateTimeColumn(this)

override def fromRow(r: Row): User = User(
    verified_at(r),  // <- compile error
)
}

Ошибка компиляции:

error: type mismatch;
[ERROR]  found   : Option[com.websudos.phantom.dsl.DateTime]
[ERROR]     (which expands to)  Option[org.joda.time.DateTime]
[ERROR]  required: Option[java.time.LocalDateTime]
[ERROR]     verified_at(r),

Мне нравится придерживаться Java 8 LocalDateTime, как я могу решить OptionDateTimeColumn требуется время йода? Или есть лучший подход?

2 ответа

Решение

Phantom по-прежнему совместим с JDK7, и это важно для нас, поэтому время Java 8 не поддерживается напрямую, но для него есть отдельный модуль. В вашей сборке.

libraryDependencies ++= Seq(
  "com.websudos" %% "phantom-jdk8" % phantomVersion
)

Тогда вам нужно:

import com.websudos.phantom.dsl._
import com.websudos.phantom.jdk8.dsl._

class UserModel extends CassandraTable[ConcreteUserModel, User]{

  // This will not return Option[LocalDate], it will return simply LocalDate
  object verified_at extends JdkLocalDateColumn(this)

  override def fromRow(r: Row): User = User(verified_at(r))
}

Вот все столбцы, доступные для Java 8. Для необязательных столбцов:

import com.websudos.phantom.dsl._
import com.websudos.phantom.jdk8.dsl._

class UserModel extends CassandraTable[ConcreteUserModel, User]{

  object verified_at extends OptionalPrimitiveColumn[ConcreteUserModel, User, JdkLocalDate](this)

  override def fromRow(r: Row): User = User(verified_at(r))
}

В последней версии вы можете сделать это так:

object date extends Col[LocalDateTime] with PrimaryKey
Другие вопросы по тегам