この質問は以前のquestionに関連しています。しかし、その質問は閉じているので、私は別のものを作成しなければなりません。 ユースケースはこれです:私は5列のテーブルを持っています。レコードを作成するときは、2列しか必要ありません。後で、ユーザーは同じレコードにさらに情報を追加します。例えば、以下の構造を有するユーザテーブル:id |電話|電子メール|クレジット|レベル。ユーザーが登録するとき、私は自分の電子メールアドレスだけが必要です。ユーザーはIDと電子メールで作成されます。後で、ユーザーは電話番号、クレジットを追加したい、システムもこのユーザーが十分なクレジットを持っているときにレベルを更新します。 私も、私は、私は右のオプションのカラムを使用してphantom dslのオプションの列の使い方は?
sealed class Users extends CassandraTable[Users, User] {
object id extends UUIDColumn(this) with PartitionKey[UUID]
object phone extends OptionalStringColumn(this)
object email extends OptionalStringColumn(this)
object credit extends OptionalDoubleColumn(this)
object level extends OptionalStringColumn(this)
def fromRow(row: Row): User = {
User(id(row), phone(row), email(row), credit(row), level(row))
}
}
アムいる?
case class User(id:UUID, phone:Option[String], email:Option[String],
credit:Option[Double], level:Option[String]
を作成 ユーザーが1つまたは複数の特定の列を更新しているユースケースについて、どのように進めるべきですか?私はあなたがIDからテーブルを読み、既存の列の値を持つUserオブジェクトを作成し、新しい値を追加して、レコードを更新する必要があるため、この方法がうまく動作しないこの
ようdef updateUser(u: User): Future[ResultSet] = {
update.where(_.id eqs u.id).modify(_.phone setTo u.phone)
.and(_.email setTo u.email)
.and(_.credit setTo u.credit)
.and(_.level setTo u.level)
.consistencyLevel_=(ConsistencyLevel.QUORUM)
.future()
}
を更新方法を試してみました。また、更新メソッドに多くの条件を記述することも現実的ではありません。私がたくさんの列を持っていて、各列を別々に更新できるなら、可能な値の組合せの巨大なリストを書く必要があります。以下の方法が働く可能性があります
if(u.phone != None) update.where(_.id eqs u.id).modify(_.phone setTo u.phone).future
if(u.email != None) update.where(_.id eqs u.id).modify(_.email setTo u.email).future
if(u.credit != None) update.where(_.id eqs u.id).modify(_.credit setTo u.credit).future
......
しかし、私はあなたがそれぞれの更新に更新失敗を処理する場合、それは悪夢となりますので、それは良い習慣であることを確認していません。オプションの列を使用して必要なものを達成するにはどうすればよいですか?
' column.parse(行).toOption'が自動的に追加されます。コレクションのようなものは、 'Optional'を必要とせずに自動的に空になるでしょう。 – flavian