JPA / JTA / @Transactional Spring аннотация
Я читаю управление транзакциями с использованием Spring framework. В первой комбинации я использовал Spring + hiberante и использовал API Hibernate для управления транзакцией (Hibenate API). Затем я хотел протестировать с @Transactional
annotations @Transactional
, и это сработало.
Я смущаюсь:
-
У JPA, JTA, Hibernate есть свой «собственный» способ управления транзакциями. В качестве примера рассмотрим, использую ли Spring + Hibernate, в этом случае вы использовали бы транзакции «JPA»?
- Модель дизайна Singleton vs Singleton beans в весеннем контейнере
- Как использовать две или более базы данных с весной?
- Каков «лучший» способ делать распределенные транзакции в нескольких базах данных с использованием Spring и Hibernate
- Spring @ContextConfiguration, как установить правильное местоположение для xml
- Как я могу получить список всех зарегистрированных пользователей (через весеннюю безопасность), мое веб-приложение
Как у нас есть JTA, правда ли, что мы можем использовать Spring и JTA для управления транзакциями?
-
@Transactional
– это особенность Spring Framework? Из того, что я понял, эта аннотация является специфичной для Spring Framework. Если это правильно, это@Transactional
с помощью JPA / JTA для управления транзакциями?
Я читаю онлайн, чтобы очистить свои сомнения, однако я не получаю прямого ответа. Любые входы будут большой помощью.
- @Transactional (распространение = Propagation.REQUIRED)
- Фильтровать определенные пакеты в @ComponentScan
- Как откатить транзакцию базы данных при тестировании служб с помощью Spring в JUnit?
- Почему Spring MVC нуждается по крайней мере в двух контекстах?
- Понимание транзакций Spring. Что происходит, когда транзакционный метод вызывает другой транзакционный метод?
- Как интегрировать весну с сеансом гибернации и управлением транзакциями?
- Соответствующий шаблон является строгим, но для элемента 'tx: annotation-driven'
- Spring @Transactional для чтения только для чтения
@Transactional
в случае @Transactional
Spring->Hibernate
с использованием JPA
т.е.
@Transactional
Аннотации должны быть размещены вокруг всех операций, которые неотделимы.
Так что давайте возьмем пример:
У нас есть 2 модели, то есть Country
и City
. Реляционное сопоставление модели « Country
и City
похоже на одну страну, где могут быть несколько городов, поэтому сопоставление,
@OneToMany(fetch = FetchType.LAZY, mappedBy="country") private Set cities;
Здесь Страна сопоставлена с несколькими городами с их ленинностью. Итак, вот роль @Transactinal
когда мы извлекаем объект Country из базы данных, тогда мы получим все данные объекта Country, но не получим Set of cities, потому что мы выбираем города LAZILY.
//Without @Transactional public Country getCountry(){ Country country = countryRepository.getCountry(); //After getting Country Object connection between countryRepository and database is Closed }
Когда мы хотим получить доступ к Set of Cities из объекта страны, тогда мы получим нулевые значения в этом Set, потому что объект Set, созданный только этим Set, не инициализируется с данными для получения значений Set, которые мы используем @Transactional
т. @Transactional
//with @Transactional @Transactional public Country getCountry(){ Country country = countryRepository.getCountry(); //below when we initialize cities using object country so that directly communicate with database and retrieve all cities from database this happens just because of @Transactinal Object object = country.getCities().size(); }
Таким образом, в основном @Transactional
– это услуга, которая может выполнять множественный вызов в одной транзакции без закрытия соединения с конечной точкой .
Надеюсь, это поможет вам.