1

Cassandra 3.7 で Phantom 1.28 を使用しています。

私は 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 に固執したいのですが、 OptionDateTimeColumnjoda 時間が必要な問題を解決するにはどうすればよいですか? または、より良いアプローチがありますか?

4

2 に答える 2

2

Phantom はまだ JDK7 と互換性があり、これは私たちにとって重要でした。そのため、Java 8 time は直接サポートされていませんが、別のモジュールがあります。あなたのビルドで。

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 に答える