Преимущества использования управления транзакциями Springs по сравнению с использованием Hibernate - PullRequest
15 голосов
/ 09 февраля 2011

Я пытался изучать весну и спящий режим, и я использовал множество примеров в сети, чтобы собрать хорошее приложение. Однако теперь я понял, что Spring поддерживает управление транзакциями. В моем весеннем приложении я просто делал любые звонки, которые хотел, прямо в спящий режим. Есть ли какая-то причина / преимущество в том, почему люди использовали бы управление транзакциями Spring / db?

Ответы [ 2 ]

25 голосов
/ 09 февраля 2011

Реальные преимущества:

  • Легкий декларативный синтаксис.Сравните:

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

    и

    @Transactional
    public void saveEmployee(Employee e) {
        sf.getCurrentSession().save(e);
    }
    
  • Гибкое распространение транзакций.Представьте себе, что теперь вам нужно выполнить этот saveEmployee() метод как часть сложной транзакции.При ручном управлении транзакциями вам необходимо изменить метод, поскольку управление транзакциями жестко запрограммировано.В Spring распространение транзакций работает плавно:

    @Transactional
    public void hireEmployee(Employee e) {
        dao.saveEmployee(e);
        doOtherStuffInTheSameTransaction(e);
    }
    
  • Автоматический откат в случае исключений

9 голосов
/ 09 февраля 2011

В справочном документе пружины очень четко сказано

Spring Framework предоставляет согласованную абстракцию для управления транзакциями, которая обеспечивает следующие преимущества:

  • Обеспечивает согласованную модель программирования для различных API транзакций, таких как JTA, JDBC, Hibernate, JPA и JDO.
  • Поддерживает декларативное управление транзакциями.
  • Предоставляет более простой API для программного управления транзакциями, чемКоличество сложных API транзакций, таких как JTA.
  • Очень хорошо интегрируется с различными абстракциями доступа к данным Spring.

Обеспечивает согласованную модель программирования для различных API транзакций, таких каккак JTA, JDBC, Hibernate, JPA и JDO.

Допустим, вы в настоящее время используете api hibernate для управления транзакциями, и когда-нибудь в будущем вы захотите переключиться на JDO.Это требует изменения кода управления транзакциями.Если вы используете Spring, то никаких изменений не будет.

Поддерживает декларативное управление транзакциями.

Аналогично EJB

Предоставляет более простой API дляпрограммное управление транзакциями, отличное от ряда сложных API-интерфейсов транзакций, таких как JTA.

JTA и JDBC имеют разные API для управления транзакциями.Spring абстрагирует это, предоставляя единый API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...