2017-07-21 8 views
0

Dans la fonction suivante, je mets à jour un utilisateur. Mais l'utilisateur a un champ « CreatedDate » qui sera dans la db, mais ne sera pas dans l'entité utilisateur fourni par le client:Champ de mise à jour Slick dans l'entité après le filtre mais avant le champ de mise à jour/exclusion de la mise à jour?

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) 
    ) 
} 

Est-il possible de mettre user.createdDate, en utilisant la valeur de la ligne d'utilisateur existante dans la base de données avant d'appeler la mise à jour (utilisateur)?

Pour référence est ici que je mets le champ CreatedDate lors de la création d'un utilisateur (l'utilisateur est une classe immuable de cas, donc je fais une copie pour régler la CreatedDate):

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

Répondre

1

J'ai fini par faire juste une lecture avant la mise à jour, comme ceci:

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

Vous pouvez déstructurer l'objet utilisateur comme ceci et passez createdDate.

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

Merci, bien que ma classe utilisateur a beaucoup de champs, environ 15 (non montré dans mon exemple), alors cela pourrait être un peu lourd avec beaucoup de champs? En outre, que se passe-t-il si un champ a été ajouté à l'utilisateur à une date ultérieure - vous devez savoir pour mettre à jour cette méthode avec le nouveau champ? – Rory

+0

Vous pouvez définir 'updateFunction' dans' map' dans la classe de cas User ou son compagnon. Peut-être que ça aide à les garder ensemble. –