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 = 123Deux 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 !