1

我正在使用 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需要 joda 时间?还是有更好的方法?

4

2 回答 2

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))
}
于 2016-09-01T10:59:09.573 回答
0

在最新版本中,您可以这样做:

object date extends Col[LocalDateTime] with PrimaryKey
于 2018-08-05T09:52:30.613 回答