2015-03-09 14 views
10

Potrebbe spiegare la differenza tra i due tipi di operazioni:Qual è la differenza tra un "operazione Primavera" e una "operazione Hibernate"

  1. Hibernate transazione
  2. transazione Primavera

Inoltre vorrei sapere l'annotazione @Transactional.

+1

Un gestore transazioni Spring (se configurato correttamente) può gestire le transazioni di ibernazione. '@ Transactional' è il modo per dichiarare i metodi transazionali in' Spring'. Quindi la differenza è la stessa di una ruota di macchina e di un volante, quando "configurato correttamente" ruotando il volante si muovono le ruote dell'auto ... ed entrambe sono ruote :). – Augusto

risposta

10

Bene per i principianti sono entrambe le transazioni, ma comprendono diversi concetti e componenti.

TL; DR

offerte Hibernate con specifiche operazioni di database, mentre la primavera offre un servizio generale di gestione delle transazioni. @Transactional è un bel modo di configurare il comportamento della gestione delle transazioni.

La lunga storia:

transazioni

operazioni siano sostanzialmente le unità di lavoro (ad esempio modifiche a qualcosa) che sono gestiti come una singola operazione che può essere sia commit o il rollback. Esistono molti tipi diversi di transazioni nel mondo java: database, sistemi di messaggistica come JMS, transazioni tra applicazioni (per coloro che non sono deboli di cuore) o qualsiasi altra cosa che potrebbe dover essere inclusa in una transazione. Nelle transazioni standard Java vengono gestite utilizzando lo Java Transaction API che stabilisce le regole su come partecipare a una transazione.

Hibernate

Hibernate è un ORM per astrarre componenti di database a oggetti Java, così le sue operazioni sono specificamente legati alle modifiche apportate all'interno di un database. Una transazione può essere composta da una o più scritture su varie tabelle di database che vengono tutte confermate una volta completata l'operazione. Rollback della transazione, ad es. F ci sono errori durante l'operazione, consente di annullare tutte le modifiche.

Primavera

Al suo livello più basso Spring è un framework applicativo per la gestione della configurazione e delle dipendenze tra gli oggetti. Inoltre, fornisce un'interfaccia per la gestione di servizi di livello superiore che vengono utilizzati in applicazioni moderne come database, servizi di messaggistica, framework MVC e transazioni.

Spring è progettato per essere utilizzato come un master onnicomprensivo di oggetti e servizi all'interno dell'applicazione, quindi il suo concetto di transazione è a un livello superiore rispetto alle transazioni specifiche del database con cui ibernare si preoccupa. Spring Transactions sono progettati per fornire un controllo a grana fine di tutte le risorse transazionali e al contempo estrapolare la codifica spesso disordinata necessaria per coordinare le transazioni.

@Transactional

Primavera fornisce alcuni metodi differenti per l'utilizzo di operazioni - tra gli altri aspetti là basato su XML, la codifica per l'API e le transazioni dichiarative a base di annotazione.Le transazioni basate su annotazioni sono utili perché non è necessario aggiungere il codice boilerplate di gestione delle transazioni alla tua app (anche utilizzando PlatformTransactionManager tramite l'API ha un bel po 'di overhead di codifica).

Quindi, in pratica, con lo @Transactional è in fase di runtime che esegue la scansione del codice base per le classi e i metodi @Transactional e li include nel codice di gestione specifico della transazione, in base a ciò che è stato configurato tramite l'annotazione. Quindi, un metodo come questo:

@Transactional(propagation = REQUIRES_NEW, rollbackFor = {Exception.class}) 
public void saveAndSendMessage(Foo foo) throws Exception { 
    dbManager.save(foo); 
    Bar bar = transform(foo); 
    jmsSystem.send(bar); 
} 

può avere primavera impostare una nuova operazione per il sistema di database e JMS, e coordinare senza bisogno di aggiungere tutto il codice specifico gestione tx automagicamente.

Problemi correlati