2013-04-17 11 views
6

Nel mio file hibernate.cfg.xml, una delle proprietà è -necessità di comprendere transaction.factory_class di configurazione di Hibernate

<property name = "transaction.factory_class"> <!--1--> 
org.hibernate.transaction.JDBCTransactionFactory <!--2--> 
</property> <!--3--> 

Altre proprietà sono facili da capire. Ma mi sono venute in mente molte domande quando ho visto la proprietà di cui sopra.

linea 1- questa specifica classe che implementa l'Operazione * fabbrica * Interfaccia.

Q1 - Ho visto i documenti java per TransactionFactory ma non ho capito cosa sia realmente. Cosa significa questa "fabbrica"? Perché non lo chiamano TransactionGenerator come da linea -

Contratto per la generazione di istanze di Transizione Hibernate.

Q2 - TransactionFactory mi portano a transazione. È esattamente uguale a una transazione di database?

Q3 -

una singola sessione può estendersi su più transazioni poiché la nozione di una sessione (una conversazione tra l'applicazione e il datastore) è di granularità grossolana rispetto alla nozione di una transazione. Tuttavia, si intende che ci sia al massimo una Transazione senza commit associata a una particolare Sessione in qualsiasi momento.

... la nozione di sessione è di granularità più grossolana della nozione di transazione.

Che cosa significa in parole semplici?

-

Tuttavia, si prevede che ci sia al massimo un commit transazione associato a un particolare sessione in qualsiasi momento.

Perché lo intendi?

Non penso che i documenti API siano chiari. Rende miserabile una vita n00b.

risposta

5

Q1 - Il ragionamento è chiaro. La creazione della transazione segue un modello di fabbrica. Ad esempio, in un ambiente in cui i server delle applicazioni (come JBOSS, WebSphere ecc.) Gestiscono la creazione della transazione tramite le API JTA, si utilizzerà un factory Transazione JTA per creare transazioni e tali transazioni verranno ulteriormente utilizzate dalla modalità di sospensione. In un ambiente gestito esclusivamente da Spring, Spring può essere configurato per utilizzare HibernateTransactionFactory.In breve, ne seguirebbe un modo simile come:

IFactory f= FactoryCreatorForYourEnvironment.create(); 
Transaction t = f.create(); 

Q2 e Q3 - Sì, una fabbrica di un'operazione di sospensione crea le transazioni di database sul sottostante DB. Si noti che una sessione può estendersi su più transazioni: una sessione di sospensione astrae una connessione al database. Sulla stessa connessione, più transazioni di inizio, i cicli di transazione di commit sono possibili. Esempio: proprietà REQUIRE_NEW se i bean partecipanti (EJB o bean SPRING). Quindi la sessione è un termine più ampio (più grossolano) come menzionato nella documentazione.

Le transazioni sono necessarie per qualsiasi scrittura, eliminazione, lettura protetta. Quindi la sessione contiene una transazione implicita. È possibile leggere un articolo di overflow relativo allo stack here.

HTH.

Problemi correlati