2011-02-09 10 views
14

Próbowałem uczyć się wiosny i hibernacji, a użyłem wielu przykładów w sieci, aby stworzyć ładną aplikację. Uświadomiłem sobie jednak, że Spring wspiera zarządzanie transakcjami. W mojej aplikacji na wiosnę po prostu zrobiłem to, co chciałem, bezpośrednio do hibernacji. Czy istnieje powód/korzyść, dlaczego ludzie korzystali z usług w zakresie zarządzania transakcjami/db w Spring?Korzyści z używania zarządzania transakcjami sprężystymi a używaniem hibernacji

+1

Używasz dwufazowy zobowiązuje się do bazy danych, a także gdzie indziej - Korzystanie z wiosny. w innym razie wybierz ten, którego chcesz użyć. –

+0

Co to jest zatwierdzenie dwufazowe, jeśli mogę zapytać? –

Odpowiedz

24

Prawdziwe zalety to:

  • Lekki składnia deklaratywny. Porównaj:

    public void saveEmployee(Employee e) { 
        Session s = sf.getCurrentSession();  
        s.getTransaction().begin(); 
        s.save(e);  
        s.getTransaction().commit(); 
    } 
    

    i

    @Transactional 
    public void saveEmployee(Employee e) { 
        sf.getCurrentSession().save(e); 
    } 
    
  • propagację transakcji elastyczny. Wyobraź sobie, że teraz musisz wykonać tę metodę saveEmployee() jako część złożonej transakcji.W przypadku ręcznego zarządzania transakcjami należy zmienić metodę, ponieważ zarządzanie transakcjami jest zakodowane na stałe. Ze sprężyną, propagacja transakcja działa płynnie:

    @Transactional 
    public void hireEmployee(Employee e) { 
        dao.saveEmployee(e); 
        doOtherStuffInTheSameTransaction(e); 
    } 
    
  • automatyczne wycofanie w przypadku wyjątków

+0

Chyba powinienem zapytać, jaka jest korzyść z używania hibernacji ze sprężyną? Czy Hibernate nadal przynosi coś do stołu? –

+0

@John: W porównaniu do wiosny bez hibernacji lub hibernacji bez wiosny? – axtavt

+0

Próbuję zrozumieć, dlaczego ktoś użyłby Hibernate, gdyby mieli Spring. Wygląda na to, że Hibernate dużo ich nie kupuje. A może brakuje mi czegoś. –

8

spring's reference doc wspomina bardzo wyraźnie

The Spring Framework zapewnia spójnego abstrakcji dla transakcji zarządzania, który zapewnia następujące korzyści:

  • zapewnia spójny model programowania w różnych transakcji Interfejsy API, takie jak JTA, JDBC, Hibernate, JPA i JDO.
  • Obsługuje deklaratywne zarządzanie transakcjami.
  • Udostępnia prostszy interfejs API do automatyzacji transakcji niż szereg złożonych transakcji API takich jak JTA.
  • Bardzo dobrze integruje się z różnymi abstrakcjami dostępu do danych Spring.

zapewnia spójny model programowania w różnych transakcji API, takich jak JTA, JDBC, Hibernate, JPA i JDO.

Powiedzmy, że obecnie korzystasz z funkcji hibernacji w celu zarządzania transakcjami, a czasem na drodze, którą chcesz przełączyć na JDO. Wymaga to zmiany kodu zarządzania transakcjami. Jeśli używasz Springa, wtedy nie ma zmian.

Obsługuje deklaratywne zarządzanie transakcjami.

podobne do EJB

zapewnia prostsze API do programowego zarządzania transakcjami niż liczba złożonych transakcji API, takich jak JTA.

JTA i JDBC mają różne interfejsy API do zarządzania transakcjami. Spring streszcza to poprzez zapewnienie jednolitego API.

+0

Tak, ale w rzeczywistości nie jestem pewien, co to oznacza. Czy standardową praktyką jest używanie zarządzania transakcjami Spring przez Hibernaty? Czy nie tracisz niektórych korzyści z używania hibernacji w ten sposób? –

+1

@John Baker - Nie, nie jesteś. Spring HibernateTransactionManager (nieoczekiwanie) wykorzystuje funkcje transakcji Hibernate, mając jednocześnie na uwadze zalety ujednoliconej abstrakcji transakcji Spring. Jeśli używasz Springa i korzystasz z transakcji, powinieneś użyć transakcji Spring. – OrangeDog

Powiązane problemy