我正在使用Phantom 1.28和Cassandra 3.7。
我有一个带有Java 8 {1}}的案例类:
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
)
}
我喜欢坚持Java 8 LocalDateTime,我如何解决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),
需要joda时间?或者有更好的方法吗?
答案 0 :(得分: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))
}
Here are可用于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))
}
答案 1 :(得分:0)
在最新版本中,您可以这样做:
object date extends Col[LocalDateTime] with PrimaryKey