6 votes

Où puis-je trouver de la documentation sur NHibernate ISession.Persist() ?

L'ISession de NHibernate expose une méthode Persist() avec deux surcharges. Je ne trouve nulle part de documentation sur cette méthode. Elle n'est même pas mentionnée dans le matériel de référence de NHibernate sur http://nhibernate.info/doc/nh/en/index.html .

Cette méthode est-elle ou sera-t-elle obsolète ? Quand est-elle censée être utilisée ? Comment se compare-t-elle à SaveOrUpdate() ?

Tout conseil serait très apprécié.

4voto

asgerhallas Points 5134

Le dernier commentaire sur ce fil de discussion http://opensource.atlassian.com/projects/hibernate/browse/HHH-1273 le précise très bien :

persist() est bien défini. Elle crée une instance transitoire persistante. Cependant, elle ne garantit pas que la valeur de l'identifiant sera attribuée à l'instance persistante immédiatement. immédiatement à l'instance persistante, l'attribution peut se faire au moment de l'affleurement au moment de la vidange. La spécification ne le dit pas, ce qui n'est pas le cas. c'est le problème que j'ai avec persist().

persist() garantit également qu'il n'exécutera pas n'exécutera pas une instruction INSERT si elle est est appelée en dehors d'une transaction de transaction. [ ] conversations de longue durée avec une contexte de session/persistance étendu.

Une méthode comme persist() est nécessaire.

save() ne garantit pas [ ] INSERT doit être exécuté pour obtenir l l'identifiant (par exemple, le générateur "identity"), pas "séquence"), cet INSERT est exécuté immédiatement immédiatement, peu importe que vous soyez à l'intérieur ou à l'extérieur d'une transaction. Ce n'est pas une bonne chose dans une de longue durée avec une Session/contexte de persistance.

Il semble également, d'après ce que j'ai pu apprendre d'autres sources, qu'une entité ayant cascade="persist" sera cascadée au moment de l'appel, et non pas au moment de la mise à jour. Cela pourrait également être très utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X