Фантомное сопоставление 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