mercredi 9 juin 2010

Ne pas mettre a jour une table/entité avec Nhibernate

Bonjour a tous,

Aujourd'hui je me suis confronté a un problème de mise a jour par Nhibernate. Je m'explique, j'ai un traitement qui récupère/parcours plusieurs objets/entités mappées depuis une vue (oracle) bien spécifique (jointures...).

Le souci c'est que je modifie les enregistrements de cette vue pour effectuer un certain nombre de contrôle. Suite a ces tests, j'ai une opération de suppression (delete) ou mise a jour (update). Pour ces deux commandes, je stipule deux choses sur la session :

this.Session.Update(entite);
this.Session.Flush();

Or dans mon cas j'obtiens une erreur sur un update non souhaité du type : 
NHibernate: UPDATE vue_qui_va_bien SET champ1 = :p0 WHERE id= :p1;:p0 = '00000', :p1 = 123
Deux solutions se présente alors pour la gestion des mise a jour des tables et objets.

1° Lecture seule - Readonly sur tout la table


En précisant le terme mutable="false", cela précise à Nhibernate de ne pas mettre a jour cette table (vue). Aucune commande Update ou Delete ne sera effectué ! Nickel c'est ce que je voulais.

http://www.dil.univ-mrs.fr/~massat/docs/hibernate-3.1/reference/fr/html/mapping.html#mapping-declaration-class
     mutable (optionnel, vaut true par défaut) : Spécifie que des instances de la classe sont (ou non) immuables.


2° Lecture seule - Readonly sur un ou plusieurs enregistrements

En précisant le terme update="false" sur le ou les champs en question. Nhibernate ne fera pas de mise a jour si celui ci est modifié.

En esperant que cela vous aide dans vos développements avec Nhiberate !