2010-10-04 2 views
1

Si j'utilise ex.merge (obj), maintenant si dans object obj je mets la clé primaire à une valeur qui n'est pas présente dans la base de données, va-t-elle créer un nouvel enregistrement ou lancera-t-il une exception?La fusion est utilisée uniquement pour la création ou la mise à jour?

par exemple

if obj with pk val = 19 doesnot exist in database,and i set 
obj.setPk(20); 
obj.setName("nm"); 

em.merge(obj) // will this throw an exception or create a new record?`enter code here` 

Répondre

3

Il va créer un nouveau record:

  • si l'entité est déjà dans le contexte de persistance (session), aucune action est prise, à l'exception des cascades

  • Si l'entité est détachée, une copie (objet ') est retournée, qui est attachée (gérée)

  • si l'entité est transitoire (nouvelle instance), il est enregistré et persistante (et géré) copie est retourné

+0

+1 belle explication –

+0

je l'ai copié d'un commentaire que je l'ai écrit sur un générique Dao de moi, parce que ce n'est pas si simple. Je me souviens que je devais lire la spécification à quelques reprises avant de réaliser ce qui se passe :) – Bozho

Questions connexes