Appendix D. Spring Transaction Support
Using the Spring Framework’s Transactional Annotation
You can put the Transactional
annotation on
either concrete classes or interfaces, and it can be placed on a
class or a method. If a class is annotated with
Transactional
, the settings apply to every method
defined in that class. If a method is annotated with
Transactional
, the transaction settings apply to a
single method. If the Transactional
annotation is
present on both a class and a method, the settings from the method
annotation take precedence over the class annotation.
From the Transactional
annotation you can
control the isolation level of a transaction, the timeout, the propagation
setting, and an array of exceptions which should cause the transaction to
roll back.
Note
If these terms are unfamiliar, the tables might help explain them.
For example, if we wanted to always create a new transaction with
a serializable isolation level that would time out if not completed in one
minute and would roll back on a NumberFormatException
, we’d write code
like Example D-1.
@Transactional(readOnly=false, propagation=Propagation.REQUIRES_NEW, isolation=Isolation.SERIALIZABLE, rollbackFor={NumberFormatException.class}, timeout=60) public abstract void run();
Warning
If you use the Transactional
annotation, you need to be careful where you put the annotation. If you start using proxies in Spring, or if you start to delve into Spring’s compelling support ...
Get Harnessing Hibernate now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.