2017-04-02 4 views
0

Cassandraのテーブルにデータを挿入し、完全なResultSetの代わりに "user_id"カラムから値を返したいとします。ここで私のコードのスニペットです:Scala Phantom Cassandra insertメソッドが空の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)) 
    } 

Future()はFuture [ResultSet]を返します。その後、ResultSetからRowを取得し、Userに変更して、最終的にIDを取得しようとします。私は

のResultSetだデータは、私のテーブルに保存されたという事実にもかかわらず[尽くさ:真、列[]]のResultSetの

列は空であり、その結果r.one()はnullを返しました。 私の目的のための例は見つかりませんでした。だから、ファントムDSLはクイルのようなことをすることができますか?だから、createメソッドが自動的に生成されたファントムの最近のバージョンで

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

ただ好奇心から、ここでのユースケース何? – flavian

+0

私はREST APIを持っていて、cassandraにユーザーを保存する要求を投稿しています。たとえば、{"code": "201 Created"、 "id": "ffffffff"}のように、挿入後に保存されたユーザーのIDで応答したいと考えています。 – IVa

答えて

1

。詳細はhereです。 fromRowメソッドも自動的に生成されるので、手動で入力する必要はありません。

かいつまんで、これはあなたが使うことができるものである:

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

ありがとう!あなたは私の推測を認めた。 – IVa

関連する問題