J'ai deux domaines suivants:Grails remplacer objet dans un à une association
User {
UserData userData
}
UserData {
static belongsTo = [user: User]
}
et à un moment donné, je veux fusionner deux utilisateurs en un seul. Je veux dire supprimer une instance de User et attacher des UserData à un autre utilisateur.
J'ai essayé:
User zombieUser
User liveUser
UserData data = zombieUser.userData
zombieUser.delete()
liveUser.userData = data
userData.user = liveUser
userData.save()
liveUser.save()
En fait, je l'ai essayé différentes variantes, un ordre différent, semble que tous les moyens possibles. Mais il échoue toujours avec une exception. Code actuel échouera avec:
deleted object would be re-saved by cascade (remove deleted object from associations): [UserData#1]
Si j'ai mis zombie.delete()
en bas, après *.save()
, je vais obtenir:
Field error in object 'User' on field 'userData': rejected value [UserData : 1]; codes ... default message [Property [{0}] of class [{1}] with value [{2}] must be unique]
Existe-t-il un moyen de reconnecter objet existant d'un objet à un autre?
Code de travail:
UserData userData = zombieUser.userData
userData.user = null
zombieUser.userData = null
zombieUser.save(flush: true)
userData.save()
liveUser.userData = userData
userData.user = liveUser
liveUser.save()
userDate.save(flush: true)
Merci! Après votre réponse, j'ai trouvé la troisième option: mettre 'userData.user' et' zombie.userData' à 'null' avant la suppression de l'utilisateur zombie. –