2012-04-25 4 views

Répondre

5

Par défaut, hibernate inclut tous les champs de la requête de mise à jour. Si vous souhaitez exclure cette soit utiliser une mise à jour personnalisée HQL ou vous pouvez configurer hibernate à exclure les champs non modifiés dans la requête de mise à jour comme indiqué dans ce article. Ceci est fait en ajoutant dynamic-update="true" dans votre mapping de classe.

<class ... table="your_table" .... dynamic-update="true"> 

Dans une grande table avec plusieurs colonnes (conception de l'héritage) ou contient de grands volumes de données, cela aura un grand impact sur les performances du système. Il peut avoir un impact sur les performances comme indiqué here. Donc, mesurez les performances de votre code avant de l'implémenter.

Lire l'API here pour plus d'informations.

Si vous utilisez des annotations,

@org.hibernate.annotations.Entity(selectBeforeUpdate=true) 

Il est une annotation spécifique de mise en veille prolongée, et non disponible dans JPA. Voici un bon article lien vers les détails.

+0

Cela fonctionne correctement lorsque vous utilisez Hibernate uniquement. Mais j'utilise JPA, donc j'utilise uniquement persistence.xml et NOT hibernate.properties. Je fais toutes les déclarations de mes en persistence.xml comme com.kids.domain.Child et là je ne suis pas capable d'utiliser ce drapeau – Deepak

+0

@Deepak: Désolé pour le retard, j'ai mis à jour la réponse avec les détails. – ManuPK

+0

Je me demande pourquoi l'équipe d'Hibernate a choisi de mettre à jour toutes les colonnes par défaut –

0

J'ai eu un problème ces 4-5 derniers jours qui me rendaient folle.

Une opération de suppression utilisait TOUTES les colonnes au lieu de simplement la colonne de clé primaire.

Par exemple.

DELETE FROM MYTABLE WHERE ID=? AND NAME=? AND VALUE=? 

Lorsque j'ai supprimé l'annotation "dynamicUpdate = true", Hibernate commencé à générer le droit SQL, par exemple.

DELETE FROM MYTABLE WHERE ID=? 

Il était à l'origine des problèmes désagréables sur Oracle 11g, quand VALUE était un CLOB.

Questions connexes