Lorsque je modifie un objet de domaine, plutôt que de mettre à jour l'enregistrement de la base de données, je souhaite archiver l'ancien enregistrement d'enregistrement et en créer un nouveau. Je voudrais forcer GORM à le faire automatiquement.Les classes de domaine peuvent-elles être configurées pour insérer un nouvel enregistrement au lieu de la mettre à jour lors de l'enregistrement?
Par exemple, si j'avais cette classe de domaine:
class User {
String username
String email
Boolean active
}
je voudrais
user.email = email
user.save()
pour définir le drapeau actif sur l'utilisateur de faux, en gardant une trace de l'ancien email. Un nouvel enregistrement avec la nouvelle adresse e-mail et active = true sera inséré.
Est-ce un modèle courant? Est-ce facile à faire dans la classe du domaine pour que cela se fasse de manière transparente?
Intéressant, je n'y ai pas pensé. Mais comment obtenez-vous le nouvel utilisateur inséré (pour remplacer votre ancienne instance)? –
Si je crée le nouvel utilisateur dans une nouvelle session, ce sera dans une autre transaction, n'est-ce pas? Idéalement, je voudrais qu'il revienne avec le reste de la transaction si quelque chose échoue. – ataylor
@ataylor oui c'est une autre transaction. Vérifiez simplement la valeur de retour de save() et propage l'erreur à l'autre transaction pour la reculer @Pascal La seule façon dont j'ai maintenant en tête est: User.findByEmail (new_email), ou de stocker le nouvel ID utilisateur dans une portée comme session ou flash – fabien7474