Spring hibernate template quando usare e perché?

Saluti, Attualmente sta sviluppando un’applicazione di servizi Web di piccole dimensioni in cui la risposta dal servizio Web (utilizzando CXF + Spring) viene elaborata e salvata nel database. Per lavorare con il database sto usando Hibernate (3.5). Navigando su un esempio di Hibernate + Spring sul web, spesso vedo l’uso di HibernateTemplate quindi sono un po ‘confuso su questo momento e volevo chiedere:

Usi HibernateTemplate nelle tue applicazioni Hibernate3? Quando HibernateTemplate può migliorare la tua vita di sviluppo e in base a quali punti posso decidere devo usarlo o no?

Grazie.

Tutti i modelli di spring (hibernate, jdbc, rest, jpa ecc.) Hanno gli stessi pro e contro:

Pro: eseguono routine di installazione comuni per te, ti permettono di saltare il boilerplate e concentrarti sulla logica che desideri.

Con: stai accoppiando la tua applicazione strettamente alla struttura della molla. Per questo motivo, Spring consiglia di non utilizzare più HibernateTemplate .

In particolare, ciò che HibernateTemplate fatto per te è stato quello di aprire e chiudere automaticamente sessioni e operazioni di commit o rollback dopo l’esecuzione del codice. Tuttavia, tutto ciò può essere realizzato in modo orientato agli aspetti utilizzando la gestione delle transazioni dichiarative di Spring.

Riferimento:

  • Spring Reference: ORM: Hibernate per gli attuali modelli di utilizzo della sospensione di spring suggeriti
  • Riferimento di spring: uso primaverile classico: HibernateTemplate

Aggiornare:

A partire da Spring 3.1 (e versioni più recenti), HibernateTemplate è stato rimosso . Vedi Hibernate per i modelli di utilizzo attualmente suggeriti.

Permettetemi di chiarire una cosa sul fatto che Spring’s HibernateTemplate non sarà supportata in futuro, il che significa che le versioni di Hibernate 4+ non supportano HibernateTemplate. Quindi è consigliabile utilizzare la gestione dichiarativa delle transazioni come suggerito da Sean.

HibernateTemplate racchiude un numero di cose per rendere la vita più facile.

È una tua scelta usarlo o meno. Del resto, puoi lavorare con un database senza Hibernate. Il materiale JDBC di Spring è molto buono. Potresti trovare più facile risolvere il tuo problema senza dover imparare Hibernate.

Il pattern OpenSessionInViewFilter è efficace. Questo apre una sessione di sospensione e la lega al thread, durante l’elaborazione di ogni richiesta. OpenSessionInView estende anche la Session e la caricabilità al livello di visualizzazione View e View, che riduce l’accoppiamento e la complessità (consentendo di “funzionare”).

Le mie filosofie non sono davvero d’accordo con la gestione delle transazioni basata su aspetti / dichiarazioni. Mi piace rendere “espliciti” importanti eventi di cambiamento di stato / ciclo di vita, poiché dovrebbero essere assolutamente definiti – non debolmente dipendenti da più livelli nascosti e indiretti, che potrebbero funzionare o meno.

Fornisce un punto per eseguire il debug su.

Il commit TX è solo una riga di codice; ma è il più importante su cui vuoi arrivare. Non più sintatticamente di una dichiarazione “transazionale”; ma molto più definito.

Sinceramente, trovo che “comandi utente” o “richieste”, che sono il posto giusto per iniziare una transazione e controllo di transazione, dovrebbero essere ben strutturati, ben identificati e abbastanza espliciti all’interno dell’applicazione.

(Ho avuto difficoltà a far funzionare le cose che caricavano le classi di aspetto, provandolo quando è uscito. La mia valutazione è che rispetto al codice OO ben scritto, l’aspetto ha un valore marginale limitato).

Suggerimento: Generalmente faccio una lezione di supporto, per rendere davvero conveniente ottenere la Sessione e impegnare la Transazione.

HbHelper o somesuch.

Tutti i modelli saranno deprecati andando avanti. Meglio usare il gestore di entity framework che è lo standard di JPA.