2013-08-09 4 views

ответ

1

Весна сама по себе не способна начать/совершить/отменить транзакцию; его цель состоит в том, чтобы удалить код плиты котла, необходимый для управления жизненным циклом транзакции, и делегировать движок персистентности (Hibernate, JDBC, JPA и т. д.) реальный запуск/фиксация/откат.
Возьмем такой пример:

Session s = sessionFactory.getCurrentSession(); 
Transaction tx = s.beginTransaction(); 
try 
{ 
    doSomeStuff(); 
    tx.commit(); 
} 
catch(HibernateException e) 
{ 
    tx.rollback(); 
} 
s.close(); 

Это стандартная (плита котла) для выполнения операций по сделке (с использованием Hibernate, если вам нужно переключиться на JPA вам нужно переписать код).
С весной вы можете использовать декларативно (АОП, с помощью XML или с помощью аннотаций), чтобы удалить стандартный код таким образом:

@Transactional 
public void doSomeStuff() 
{ 
    // your code 
} 

Я использую аннотацию, например, и @Transactional используется для замены все котла пластины кода выше, и у вас есть еще одна функция: переход на JPA прозрачен, потому что это просто проблема конфигурации. Вопрос действительно сложный, и ответ на ваш вопрос:
Вы не можете «сравнить» транзакцию Спящего режима и весеннюю сделку, потому что это две разные вещи; Весенняя транзакция должна быть «Весенняя поддержка транзакций»

+0

Посмотрите, пожалуйста, подробные объяснения, но один вопрос в моем сознании, если я выполняю 10-12 запросов, и все запросы являются взаимозависимыми, и если у запроса есть какие-либо проблемы, данные будут откат только с использованием записи @Transactional? –

+0

Я не получил ваш последний комментарий –

+0

Да, данные будут отклонены только с помощью '@ Transactional': если' // ваш код' содержит ваши 10-12 запросов, а один не выполняется, все предыдущие команды отбрасываются; '@ Transactional' применяются ко всему методу –

1

Весна - это та, которая позволит вам управлять транзакциями в декларативном пути (используя AOP, настроенный глобально или с аннотациями @Transactional). И если вы не используете JTA, вы настроите его для делегирования в Hibernate для обработки транзакций.

Используйте Spring для обработки транзакций.

+0

Можно ли более подробно изучить свой ответ? –

+0

См. Http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/htmlsingle/#transaction-declarative и http://static.springsource.org/spring/docs/3.2.x/весна-каркасного ссылка/htmlsingle/# ОРМ-зимуют-ТХ-декларативной. Если у вас есть более конкретный вопрос, возможно, я смогу ответить на него. –

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