2017-04-02 2 views
0

Ich möchte Daten in meine Tabelle in Cassandra einfügen und dann Wert aus Spalte "user_id" anstelle von vollständigen ResultSet zurückgeben. Hier ist es Schnipsel meines Code:Scala Phantom Cassandra Einfügemethode gibt leer zurück ResultSet

def create(user: User): Future[UUID] = { 
    insert 
     .value(_.id, user.id) 
     .value(_.email, user.email) 
     .value(_.name, user.name) 
     .consistencyLevel_=(ConsistencyLevel.ALL) 
     .future() 
     .map(r => fromRow(r.one()).id) 
    } 

    def fromRow(r: Row): User = { 
    User(id(r), email(r), name(r)) 
    } 

So Zukunft() liefert Zukunft [ResultSet]. Danach versuche ich, Row aus ResultSet abzurufen, modifiziere es zu User und bekomme schließlich eine ID. Trotz der Tatsache, dass die Daten auf meinem Tisch gespeichert wurden bekam ich

ResultSet [erschöpft: true, Columns []]

Spalten des ResultSet leer sind und folglich r.one() zurückgegeben null. Ich habe keine Beispiele für meinen Zweck gefunden. Kann Phantom-DSL so etwas wie Quill machen?

val q = quote { 
    query[Product].insert(lift(Product(0L, "My Product", 1011L))).returning(_.id) 
} 
+0

nur aus Neugier, was hier der Fall Gebrauch ist? – flavian

+0

Ich habe REST API und Post-Anfrage, die Benutzer in Cassandra speichert und ich möchte Antwort mit ID des gespeicherten Benutzers nach dem Einfügen erhalten, zum Beispiel {"code": "201 Created", "ID": "ffffffff"}. – IVa

Antwort

1

So in neueren Versionen von Phantom, das create Methode automatisch generiert wird. Mehr Details here. Die Methode fromRow wird ebenfalls automatisch generiert, sodass Sie sie nicht manuell eingeben müssen.

Lange Rede kurzer Sinn, das ist, was Sie verwenden:

def create(user: User): Future[UUID] = { 
    store(user) 
    .consistencyLevel_=(ConsistencyLevel.ALL) 
    .future() 
    .map(_ => user.id) 
} 
+0

Danke! Du hast meine Vermutung zugegeben. – IVa

Verwandte Themen