2017-04-02 32 views
0

我想插入數據到我的Cassandra表中,然後從列「user_id」而不是完整的ResultSet返回值。這裏是我的代碼片段:Scala Phantom Cassandra插入方法返回空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。 我還沒有找到任何適合我的用途的例子。那麼,phantom-dsl可以像Quill一樣做什麼?

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

只是出於好奇這裏有什麼用呢? – flavian

+0

我有REST API和發佈請求將用戶保存到cassandra,並且我希望在插入後獲得已保存用戶的ID,例如{「code」:「201 Created」,「id」:「ffffffff」}。 – IVa

回答

1

所以在更新的幻影版本中,create方法是自動生成的。更多詳情herefromRow方法也會自動生成,因此您無需手動輸入。

長話短說,這是你可以使用什麼:

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

謝謝!你承認我的猜測。 – IVa