2017-07-21 12 views
0

次の機能では、ユーザーを更新しています。しかし、ユーザーはデシベルになります「CreatedDateに」フィールドを持っていますが、クライアントから渡されたユーザエンティティになりません。更新後の更新/除外フィールドの前に、フィルタ後のエンティティのスリック更新フィールド?

def update(user: User): Future[Int] = { 
    db.run(
     userTable 
     .filter(_.userId === user.userId) 
     // Can I set user.createdDate here to the existing value? 
     .update(user) 
    ) 
} 

はそれから値を使用して、user.createdDateを設定するために、おそらくです私は更新(ユーザー)を呼び出す前に、dbの既存のユーザー行ですか?ここでは参考のため

は、(ユーザーが不変ケースクラスですので、私はCreatedDateにを設定するためのコピーを行う)、ユーザーを作成するときに、私はCreatedDateにフィールドを設定する方法である:

def create(user: User): Future[Int] = { 
    db.run(userTable += user.copy(
     createdDate = Option(Timestamp.valueOf(LocalDateTime.now())))) 
} 

答えて

1
私はちょうどこのように、更新前の読み込みをやってしまった

this.read(user.userId).flatMap { 
    case Some(existingUser) => 
     db.run(
      userTable. 
      filter(_.userId === user.userId). 
      update(user.copy(createdDate = existingUser.createdDate))) 
    case None => throw new NotFoundException(...) 
} 
1

あなたはユーザーオブジェクトをdestructureすることができますこのようにしてcreatedDateをスキップしてください。

userTable 
    .filter(_.id === id) 
    .map(t => (t.firstName,..., t.modifiedDate)) 
    .update(("John",..., Some(Timestamp.valueOf(LocalDateTime.now)))) 
+0

おかげで私のUserクラスは、フィールドの多くを持っているものの、約15(私の例に示されていない)ので、このかもしれませんたくさんのフィールドで扱いにくいですか?また、後でUserにフィールドが追加された場合、このメソッドを新しいフィールドで更新する必要がありますか? – Rory

+0

User caseクラスまたはそのコンパニオン内の 'map'内に' updateFunction'を定義することができます。多分それらを一緒に保つのに役立ちます。 –

関連する問題