I endete die folgende Lage sein Phantom zu verwenden, um mit einer bestehenden Verbindung nach oben zu tun:
eine neue Eigenschaft Definierte PhantomTable anstelle von Phantom ‚Table‘ Merkmale verwendet werden. Sie sind identisch mit Ausnahme der Entfernung der RootConnector
trait PhantomTable[T <: PhantomTable[T, R], R] extends CassandraTable[T, R] with TableAliases[T, R]
Defined meiner Tabellen durch den PhantomTable Zug erstreckt, und machten es auch zu einem Objekt. Hier hatte ich all die TableHelper Makro zu importieren, um sie
...
import com.outworkers.phantom.macros.TableHelper._
final case class Foo(id: String, name: Option[String])
sealed class FooTable extends PhantomTable[FooTable, Foo] {
override val tableName = "foo"
object id extends StringColumn with PartitionKey
object name extends OptionalStringColumn
}
object FooTable extends FooTable
Nach kompilieren zu erhalten, dass es möglich ist, alle gewünschten Methoden auf dem FooTable Objekt zu verwenden, solange eine implizite Schlüsselraum und Session besteht im Rahmen.
Dies ist ein einfaches Hauptprogramm, das zeigt, wie die Tabellen
verwendet werden können
object Main extends App {
val ks = "foo_keyspace"
val cluster = Cluster.builder().addContactPoints("127.0.0.1").build()
implicit val keyspace: KeySpace = KeySpace(ks)
implicit val session: Session = cluster.connect(ks)
val res = for {
_ <- FooTable.create.ifNotExists.future
_ <- FooTable.insert.value(_.id, "1").value(_.name, Some("data")).future
row <- FooTable.select.where(_.id eqs "1").one
} yield row
val r = Await.result(res, 10.seconds)
println(s"Row: $r")
}
Wir brauchen auch, dass für die Verwendung von lagom mit Phantom-dsl. Vielleicht benutzen Sie auch Lagom. Wenn Sie auch Lagom verwenden, fügen Sie bitte ein Tag für Lagom hinzu. Danke –
Nein, wir verwenden Lagom nicht –
@JohanJ Was ist das Problem mit der Verwendung der DB-Klasse? Ich würde es gerne besser verstehen. – flavian