2008-08-25 6 views
1

Y a-t-il un moyen de sauvegarder un objet en utilisant Hibernate s'il y a déjà un objet utilisant cet identifiant chargé dans la session?Hibernate saveOrUpdate avec un autre objet de la session

  • Faire session.contains(obj) semble renvoyer vrai seulement si la session contient cet objet exact, pas un autre objet avec le même ID.
  • L'utilisation merge(obj) lève une exception si l'objet est nouveau Avez-vous essayé

Répondre

4

appelant .SaveOrUpdateCopy()? Cela devrait fonctionner dans tous les cas, s'il y a une entité avec le même identifiant dans la session ou s'il n'y a pas d'entité du tout. C'est essentiellement la méthode catch-all, car elle convertit un objet transitoire en un objet persistant (Save), met à jour l'objet s'il existe (Update) ou même gère si l'entité est une copie d'un objet déjà existant (Copy) . A défaut, vous devrez peut-être identifier et .Evict() l'objet existant avant d'attacher (.Update()) votre "nouvel" objet. Cela devrait être assez facile à faire:

IPersistable entity = Whatever(); // This is the object we're trying to update 
// (IPersistable has an id field) 
session.Evict(session.Get(entity.GetType(), entity.Id)); 
session.SaveOrUpdate(entity); 

Bien que le code ci-dessus pourrait probablement faire avec nulle vérification de l'appel .get().

1

Que diriez-vous:

session.replicate(entity, ReplicationMode.OVERWRITE); 

?

Questions connexes