2015-01-31 2 views
3

Если JTA - это API, могу ли я использовать Hibernate в качестве реализации JTA?Могу ли я использовать Hibernate для JTA?

У меня есть приложение с Spring и Hibernate, и мне интересно, какая структура должна отвечать за транзакции, Spring или Hibernate?

+1

Весенние аннотации должны быть на ваш выбор. Выберите менеджера транзакций, который имеет смысл для вашего развертывания. – duffymo

+0

Hibernate не обрабатывает транзакции, делает транзакционный менеджер. Вы устанавливаете [диспетчер транзакций] (https://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/transaction/TransactionFactory.html), а вызов метода в 'Session' просто делегирует эту транзакцию менеджер. То же самое с [Spring] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/PlatformTransactionManager.html). Фактический управляющий транзакцией обычно является только диспетчером транзакций данных, который устанавливает транзакции в соединениях JDBC. Более общий подход - JTA. –

+0

Менеджер транзакций является частью JTA (что-то вроде enetityManager в JPA)? – user3528733

ответ

9

Hibernate не является реализацией JTA. Hibernate - это реализация JPA.

JTA - это спецификация транзакций для предприятий, реализованная провайдерами Java EE или менеджерами транзакций в режиме ожидания (например, Bitronix).

Hibernate предлагает абстракцию API транзакций, поскольку в инструментах ORM используется контекст сохранения состояния transactional write-behind.

Spring предлагает transaction management abstraction, что позволяет вам переключаться с RESOURCE_LOCAL на транзакции JTA только с некоторыми незначительными изменениями конфигурации.

Spring также может интегрироваться с абстракцией API спящего режима и JPA.

Если вы используете Spring, вам следует воспользоваться абстракцией управления транзакциями, поэтому вам не нужно использовать API транзакций Hibernate/JPA.

Поскольку Spring использует AOP, управление транзакциями отделено от вашей бизнес-логики, что было бы неверно, если бы вы использовали программный API транзакций Hibernate/JPA.

+0

Хорошо, спасибо за всесторонний ответ. Не могли бы вы объяснить мне, что такое RESOURCE_LOCAL? – user3528733

+2

Это поддержка транзакций JDBC Connection. Соединение JDBC имеет методы фиксации/отката для управления одной транзакцией базы данных. RESOURCE_LOCAL может использовать только один источник данных для каждой транзакции, в отличие от JTA, который может распространять глобальную транзакцию по нескольким источникам данных. –

Смежные вопросы