2011-06-23 8 views
0

L'élément de générateur dans le fichier de mise en correspondance d'hibernation est censé être utilisé pour déterminer comment la clé primaire est générée. Pourquoi la valeur par défaut affectée est-elle incorrecte pour les objets détachés et transitoires?Générateur attribué par Hibernate

Répondre

0

Si vous souhaitez que l'application affecte des identifiants, par opposition à la génération d'Hibernate, vous pouvez utiliser le générateur assigné. Ce générateur spécial utilise la valeur d'identifiant déjà affectée à la propriété d'identifiant de l'objet. Le générateur est utilisé lorsque la clé primaire est une clé naturelle au lieu d'une clé de substitution. C'est le comportement par défaut si vous ne spécifiez pas un élément.

Le générateur affecté fait que Hibernate utilise unsaved-value = "undefined". Cela oblige Hibernate à aller à la base de données pour déterminer si une instance est transitoire ou détachée, sauf s'il existe une propriété version ou timestamp, ou si vous définissez Interceptor.isUnsaved().

+0

L'instruction _ Force Hibernate à aller à la base de données pour déterminer si une instance est temporaire ou détachée_, implique que Hibernate utilise une valeur non enregistrée pour déterminer si un objet est détaché. Cela ne peut pas être correct car Hibernate utilise une valeur non enregistrée pour déterminer si un objet est transitoire. – Chezzplayer

+1

Oh ... je comprends. Si la valeur non enregistrée correspond, Hibernate sait que c'est un objet transitoire et utilise INSERT. Si c'est le cas, Hibernate sait que c'est détaché et utilise UPDATE. – Chezzplayer

Questions connexes