2011-01-17 15 views
5

L'ISession di NHibernate espone un metodo Persist() con due overload. Non riesco a trovare documentazione su questo metodo da nessuna parte. Non è nemmeno menzionato nel materiale di riferimento NHibernate su http://nhibernate.info/doc/nh/en/index.html.Dove posso trovare la documentazione per NHibernate ISession.Persist()?

Questo metodo è deprecato o lo sarà? Quando dovrebbe essere usato? Come si confronta con SaveOrUpdate()?

Qualsiasi suggerimento sarebbe molto apprezzato.

risposta

4

L'ultimo commento su questo thread http://opensource.atlassian.com/projects/hibernate/browse/HHH-1273 specifica molto bene:

persiste a() è ben definito. Rende persistente un'istanza transitoria . Tuttavia, non garantisce che il valore dell'identificatore venga assegnato immediatamente all'istanza persistente l'assegnazione potrebbe avvenire al momento dello svuotamento . Le specifiche non dicono questo, che è il problema che ho con persist().

persistono() garantisce anche che sarà non eseguire un'istruzione INSERT se è chiamata al di fuori della transazione confini. È utile nelle conversazioni di lunga durata con un contesto di sessione/persistenza esteso .

Un metodo come persist() è obbligatorio.

save() non garantisce lo stesso, restituisce un identificatore, e se un INSERT è da eseguire per ottenere l'identificatore (ad esempio generatore di "identità", non "sequenza"), questo inserto accade immediatamente, non importa se si è all'interno o all'esterno di una transazione. Questo non va bene in una conversazione di lunga durata con un contesto di sessione/persistenza esteso .

Inoltre, da quanto ho potuto ricavare da altre fonti, sembra che un'entità che ha cascade = "persist" si sovrapponga al momento della chiamata, non a livello di colore. Potrebbe anche essere molto utile.

+1

Questa è una scoperta eccellente. Grazie. Penso che in realtà dovrei usare SaveOrUpdate() invece di Persist() .. ma Persist() può effettivamente essere utile in alcuni scenari. Ora se posso solo capire come specificare cascade = persist con FluentNHibernate .... grazie per il tuo aiuto! –

Problemi correlati