рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди!
рдЦреИрд░, рдорд╣реАрдиреЗ рдХрд╛ рдЕрдВрдд рд╣рдореЗрд╢рд╛ рддреАрд╡реНрд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░
"рдбреЗрд╡рд▓рдкрд░ рдСрди рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ" рдХреА рджреВрд╕рд░реА рдзрд╛рд░рд╛ рд╢реБрд░реВ рд╣реЛрдиреЗ рддрдХ рдХреЗрд╡рд▓ рдПрдХ рджрд┐рди рд╢реЗрд╖ рд╣реИ, рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕реБрдВрджрд░ рдФрд░ рдХреНрд░реЛрдзрд┐рдд
рдпреВрд░реА рджреНрд╡рд╛рд░рд╛ рд╕рд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдЕрджреНрднреБрдд рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛рдареНрдпрдХреНрд░рдо (рдЬреИрд╕рд╛ рдХрд┐ рдХреБрдЫ рдЫрд╛рддреНрд░ рдЙрд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВред рдбреАрдЬреЗрдб рдореЗрдВ), рддреЛ рдЖрдЗрдП рдПрдХ рдФрд░ рд╕рд╛рдордЧреНрд░реА рджреЗрдЦреЗрдВ рдЬреЛ рд╣рдордиреЗ рдЖрдкрдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХреА рд╣реИред
рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВред
рдкрд░рд┐рдЪрдпрдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп, рдбреЗрд╡рд▓рдкрд░реНрд╕ рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрди рдХреЛ рдорд╣рддреНрд╡ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╛ рддреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдХреЛ рдмрд╛рдж рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдпрд╛ рдбреЗрд╡рд▓рдкрд░ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд┐рдирд╛ рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдирдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рди рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реВ рдПрдХ рд▓реЗрдирджреЗрди рдХреА рд╕рд╣реА рд╕реАрдорд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрдм рдПрдХ рд▓реЗрдирджреЗрди рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрдм рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рдбреЗрдЯрд╛ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрдм рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдкрдВрдк рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрдкрд╡рд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ)ред

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реВ рдпрд╣ рд╕рдордЭрдирд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрди рдХреЛ рд╕рд░реНрд╡реЛрддреНрддрдо рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред рддреЛ рдЖрдЗрдП рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред
рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрди рдХреЗ рддрд░реАрдХреЗрд▓реЗрдирджреЗрди рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
1. рдХрд╕реНрдЯрдо рдХреЛрдб рд▓рд┐рдЦрдХрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рдпрдВрддреНрд░рдгрдпрд╣ рдПрдХ рдкреБрд░рд╛рдиреА рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрди рд╡рд┐рдзрд┐ рд╣реИред
EntityManagerFactory factory = Persistence.createEntityManagerFactory("PERSISTENCE_UNIT_NAME"); EntityManager entityManager = entityManagerFactory.createEntityManager(); Transaction transaction = entityManager.getTransaction() try { transaction.begin(); someBusinessCode(); transaction.commit(); } catch(Exception ex) { transaction.rollback(); throw ex; }
рдкреЗрд╢реЗрд╡рд░реЛрдВ :
- рдХреЛрдб рдореЗрдВ рд▓реЗрди-рджреЗрди рдХреА рд╕реАрдорд╛рдПрдБ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВред
рд╡рд┐рдкрдХреНрд╖ :
- рдпрд╣ рджреЛрд╣рд░рд╛рд╡ рдФрд░ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдг рд╣реИред
- рдХрд┐рд╕реА рднреА рдЧрд▓рддреА рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдЕрд╕рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
- рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА, рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рдзрд┐ рд╕реЗ рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреЛрдб рд╕реЗ рдлрд┐рд░ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
2. рд╡рд╕рдВрдд рд╕реЗ рд▓реЗрди-рджреЗрди рдкреНрд░рдмрдВрдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛рд╕реНрдкреНрд░рд┐рдВрдЧ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
1. рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рдореИрдиреЗрдЬрдореЗрдВрдЯ : рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЗрдирджреЗрди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╡рд┐рдзрд┐ рдкрд░реНрдпрд╛рдкреНрдд рд▓рдЪреАрд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
2. рдбрд┐рдХреНрд▓рд░реЗрдЯрд┐рд╡ рдЯреНрд░рд╛рдВрдЬреИрдХреНрд╢рди рдореИрдиреЗрдЬрдореЗрдВрдЯ : рдЖрдк рдмрд┐рдЬрдиреЗрд╕ рд▓реЙрдЬрд┐рдХ рд╕реЗ рдЯреНрд░рд╛рдВрдЬреИрдХреНрд╢рди рдореИрдиреЗрдЬрдореЗрдВрдЯ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдХреЗрд╡рд▓ рд▓реЗрди-рджреЗрди рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП XML- рдЖрдзрд╛рд░рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо рдШреЛрд╖рдгрд╛рддреНрдордХ рд▓реЗрдирджреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрд╛рд░рдгреЛрдВ рдХреЛ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкрдврд╝реЗрдВ, рдЕрдиреНрдпрдерд╛ рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╕реАрдзреЗ Declarative Transaction Management рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬрд╛рдПрдБредрдЕрдм рдЖрдЗрдП рдкреНрд░рддреНрдпреЗрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВред
2.1ред рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдЯреНрд░рд╛рдВрдЬреИрдХреНрд╢рди рдореИрдиреЗрдЬрдореЗрдВрдЯ:рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рджреЛ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдПрдХред
TransactionTemplate
(рд╕реНрдкреНрд░рд┐рдВрдЧ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
рдЖрдЗрдП рдиреАрдЪреЗ рджрд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджреЗрдЦреЗрдВ (рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд┐рдВрдЧ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛)
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЙрдХреНрд╕ рд╕реЗ рд▓рд┐рдП рдЧрдП рд╣реИрдВредрд╕рдВрджрд░реНрдн Xml рдлрд╝рд╛рдЗрд▓:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/TEST"/> <property name="username" value="root"/> <property name="password" value="password"/> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="serviceImpl" class="com.service.ServiceImpl"> <constructor-arg ref="transactionManager"/> </bean>
Service
рд╡рд░реНрдЧ:
public class ServiceImpl implements Service { private final TransactionTemplate transactionTemplate;
рдпрджрд┐ рдХреЛрдИ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рдЕрдирд╛рдо рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ
TransactionCallbackWithoutResult
рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
transactionTemplate.execute(new TransactionCallbackWithoutResult() { protected void doInTransactionWithoutResult(TransactionStatus status) { updateOperation1(); updateOperation2(); } });
TransactionTemplate
рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рд╕рдВрд╡рд╛рдж рд░рд╛рдЬреНрдп рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВредTransactionTemplate
рдЖрд╡реГрддреНрддрд┐рдпрд╛рдБ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рдЖрдЗрд╕реЛрд▓реЗрд╢рди рд╕реНрддрд░) рдХреЗ рд╕рд╛рде TransactionTemplate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ TransactionTemplate рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдХреБрдЫ рд╡рд░реНрдЧ рд╕рдорд╛рди TransactionTemplate рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЦред
PlatformTransactionManager
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
рдЖрдЗрдП рдХреЛрдб рдореЗрдВ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВред
<!-- Initialization for data source --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/TEST"/> <property name="username" value="root"/> <property name="password" value="password"/> </bean> <!-- Initialization for TransactionManager --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> public class ServiceImpl implements Service { private PlatformTransactionManager transactionManager; public void setTransactionManager( PlatformTransactionManager transactionManager) { this.transactionManager = transactionManager; } DefaultTransactionDefinition def = new DefaultTransactionDefinition();
рдЕрдм, рд▓реЗрди-рджреЗрди рдкреНрд░рдмрдВрдзрди рдХреА рдЕрдЧрд▓реА рд╡рд┐рдзрд┐ рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрди рдЪреБрдирдирд╛ рд╣реИред
рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдФрд░
рдбрд┐рдХреНрд▓реЗрд░реЗрдЯрд┐рд╡ рдЯреНрд░рд╛рдВрдЬреИрдХреНрд╢рди рдореИрдиреЗрдЬрдореЗрдВрдЯ рдХреЗ рдмреАрдЪ рдЪрдпрди:
- рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдЯреНрд░рд╛рдВрдЬреИрдХреНрд╢рди рдореИрдиреЗрдЬрдореЗрдВрдЯ рддрднреА рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рдирд▓ рдСрдкрд░реЗрд╢рдВрд╕ рд╣реЛрдВред (рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпреЗ рд▓реЗрдирджреЗрди рдирд╣реАрдВ рд╣реИрдВред)
- рд▓реЗрди-рджреЗрди рдХрд╛ рдирд╛рдо рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрди рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдЬрдм рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓реЗрди-рджреЗрди рдкреНрд░рдмрдВрдзрди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рдореИрдиреЗрдЬрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрдИ рд▓реЗрди-рджреЗрди рд╡рд╛рд▓реЗ рд╕рдВрдЪрд╛рд▓рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рдпрд╣ рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░рдмрдВрдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
- рдШреЛрд╖рдгрд╛ рдкреНрд░рдмрдВрдзрди рдЖрдкрдХреЛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдореЗрдВ рд▓реЗрдирджреЗрди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред
2.2ред рдШреЛрд╖рдгрд╛рддреНрдордХ рд▓реЗрдирджреЗрди (рдЖрдорддреМрд░ рдкрд░ рдХрд┐рд╕реА рднреА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рдЧрднрдЧ рд╕рднреА рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)рдЪрд░рдг 1 : рдЕрдкрдиреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдВрджрд░реНрдн xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"/> <tx:annotation-driven transaction-manager="txManager"/>
рдЪрд░рдг 2 : рдЕрдкрдиреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдВрджрд░реНрдн xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝рдХрд░ рдПрдиреЛрдЯреЗрд╢рди рд╕рдорд░реНрдерди рд╕рдХреНрд╖рдо рдХрд░реЗрдВред
рдпрд╛ рдЕрдкрдиреА рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рдореЗрдВ
@EnableTransactionManagement
рдЬреЛрдбрд╝реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
@Configuration @EnableTransactionManagement public class AppConfig { ... }
рд╕реНрдкреНрд░рд┐рдВрдЧ рдиреЗ @Transactional
рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧреЛрдВ (рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рддрд░реАрдХреЛрдВ) рдХреЛ @ @Transactional
рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдиреЛрдЯреЗрдЯ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рд╣реИредрдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрддрд░ рдкрд░ рд░рдЦрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдкреНрд░реЙрдХреНрд╕реА рдХреНрд▓рд╛рд╕реЗрд╕ (
proxy-target-class = ┬лtrue┬╗
) рдпрд╛
mode = ┬лaspectj┬╗
(
mode = ┬лaspectj┬╗
) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЯреНрд░рд╛рдВрдЬреИрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рджреНрд╡рд╛рд░рд╛ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдФрд░ plexuses, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓реЗрди-рджреЗрди рд╡реНрдпрд╡рд╣рд╛рд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЪрд░рдг 3 : рд╡рд░реНрдЧ (рд╡рд░реНрдЧ рд╡рд┐рдзрд┐) рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐) рдореЗрдВ @
@Transactional
рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝реЗрдВред
<tx:annotation-driven proxy-target-class="true">
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди:
proxy-target-class="false"
@Transactional
рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛, рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐, рдПрдХ рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдпрд╛ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╣рд▓реЗ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред- рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпрд╛рдБ (
@Transactional
рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд) рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реЛрдВ, рдЬреИрд╕реЗ рдЖрдЗрд╕реЛрд▓реЗрд╢рди рд╕реНрддрд░ рдпрд╛ рдкреНрд░рдЪрд╛рд░ рд╕реНрддрд░, рдХреНрд▓рд╛рд╕ рд╕реНрддрд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рд╕реНрддрд░ рдкрд░ рдПрдиреЛрдЯреЗрд╢рди рд░рдЦреЗрдВред - рдкреНрд░реЙрдХреНрд╕реА рдореЛрдб рдореЗрдВ (рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдкреНрд░реЙрдХреНрд╕реА рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реА рдХреЗрд╡рд▓ "рдмрд╛рд╣рд░реА" рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ "рд╕реНрд╡рддрдВрддреНрд░ рдХреЙрд▓", рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рдХреНрд╖реНрдп рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛ рд▓рдХреНрд╖реНрдп рдХреЗ рдХреБрдЫ рдЕрдиреНрдп рддрд░реАрдХреЗ рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИ, рд░рдирдЯрд╛рдЗрдо рдкрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓реЗрдирджреЗрди рдХрд╛ рдиреЗрддреГрддреНрд╡ рдирд╣реАрдВ рдХрд░реЗрдЧреА, рднрд▓реЗ рд╣реА рдЙрд╕ рд╡рд┐рдзрд┐ рдХреЛ @
@Transactional
рд╕рд╛рде рдЯреИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред
рдЕрдм рдЪрд▓рд┐рдП @
@Transactional
рдПрдиреЛрдЯреЗрд╢рди
@Transactional
рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ
@Transactional
@Transactional (isolation=Isolation.READ_COMMITTED)
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ
Isolation.DEFAULT
- рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рди рд╣реЛрдВред
- рд▓реЗрди-рджреЗрди рдкреНрд░рдмрдВрдзрдХ (
tx
) рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд▓реЗ рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ рдХреЛ рд╡рд░реНрддрдорд╛рди tx
рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рд╕реЗ tx
рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ tx рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо рдЖрдЗрд╕реЛрд▓реЗрд╢рди рд╕реНрддрд░ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗред
DEFAULT : рдЖрдзрд╛рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрдЗрд╕реЛрд▓реЗрд╢рди рд╕реНрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
READ_COMMITTED (рдлрд┐рдХреНрд╕реНрдб рдбреЗрдЯрд╛ рдкрдврд╝рдирд╛): рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдЧрдВрджреЗ рдкрдврд╝рдиреЗ рдХреЛ рд░реЛрдХрд╛ рдЧрдпрд╛ рд╣реИ; рдиреЙрди-рд░рд┐рдкрд┐рдЯрд┐рдВрдЧ рд░реАрдбрд┐рдВрдЧ рдФрд░ рдлреИрдВрдЯрдо рд░реАрдбрд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред
READ_UNCOMMITTED (
рдЕрдирдХрдореНрдпреВрдЯреЗрдб рдбреЗрдЯрд╛ рдкрдврд╝реЗрдВ): рдпрд╣ рдЖрдЗрд╕реЛрд▓реЗрд╢рди рд▓реЗрд╡рд▓ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЯреНрд░рд╛рдВрдЬреИрдХреНрд╢рди рдЙрди рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЕрднреА рддрдХ рдЕрдиреНрдп рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рд╕реЗ рдбрд┐рд▓реАрдЯ рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВред
REPEATABLE_READ (рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрдврд╝реЗрдВ): рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рдВрдХреЗрдд рдЬреЛ рдЧрдВрджреЗ рдкрдврд╝рдиреЗ рдФрд░ рдЧреИрд░-рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдкрдврд╝рдиреЗ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ; рдкреНрд░реЗрдд рд╡рд╛рдЪрди рдкреНрд░рдХрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдиреБрдХреНрд░рдорд┐рдХ : рд╕реНрдерд╛рдпреА, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдЧрдВрджреЗ рдкрдврд╝рдиреЗ, рдЧреИрд░-рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдкрдврд╝рдиреЗ рдФрд░ рдкреНрд░реЗрдд рдкрдврд╝рдиреЗ рдХреЛ рд░реЛрдХрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрди рд╢рдмреНрджрдЬрд╛рд▓ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ: "рдЧрдВрджреЗ" рдкрдврд╝рдирд╛, рдкреНрд░реЗрдд рдкрдврд╝рдирд╛ рдпрд╛ рдмрд╛рд░-рдмрд╛рд░ рдкрдврд╝рдирд╛?
- рдбрд░реНрдЯреА рд░реАрдб : рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рдП рд▓рд┐рдЦрддрд╛ рд╣реИред рдЗрд╕ рдмреАрдЪ, рд▓реЗрди-рджреЗрди "рдмреА" рд▓реЗрди-рджреЗрди рдП рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рдПрдХ рд╣реА рд░рд┐рдХреЙрд░реНрдб рдкрдврд╝рддрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ, рд▓реЗрдирджреЗрди рдП рдиреЗ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓реЗрдирджреЗрди рдмреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИрдВ рдЬреЛ рдЕрд╕рдВрдЧрдд рд╣реИрдВред рдпрд╣ рдПрдХ рдЧрдВрджрд╛ рдкрд╛рда рд╣реИред рд▓реЗрдирджреЗрди рдмреА рдиреЗ рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ READ_UNCOMMITTED рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд▓реЗрдирджреЗрди рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рдП рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкрдврд╝ рд╕рдХрддрд╛ рдерд╛ред
- рдЧреИрд░-рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдкрдврд╝реЗрдВ : рд▓реЗрди-рджреЗрди "рдП" рдХреБрдЫ рд░рд┐рдХреЙрд░реНрдб рдкрдврд╝рддрд╛ рд╣реИред рдлрд┐рд░ рд▓реЗрдирджреЗрди "рдмреА" рдЗрд╕ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ, рд▓реЗрдирджреЗрди рдП рдиреЗ рдПрдХ рд╣реА рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рд╛ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрдирджреЗрди рдмреА рдиреЗ рдЗрд╕ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд┐рдпрд╛ред рдпрд╣ рдПрдХ рдЧреИрд░-рджреЛрд╣рд░рд╛рдИ рдЧрдИ рд░реАрдбрд┐рдВрдЧ рд╣реИред
- рдкреНрд░реЗрдд рдкрдврд╝реЗрдВ : рд▓реЗрди-рджреЗрди "рдП" рд░рд┐рдХреЙрд░реНрдб рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрдврд╝рддрд╛ рд╣реИред рдЗрд╕ рдмреАрдЪ, рд▓реЗрди-рджреЗрди "рдмреА" рд▓реЗрди-рджреЗрди рдП рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдХ рдирдпрд╛ рд░рд┐рдХреЙрд░реНрдб рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ, рд▓реЗрди-рджреЗрди рдП рдЙрд╕реА рд╕реАрдорд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рднреА рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдирджреЗрди рдмреА рд╕рд┐рд░реНрдл рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░реЗрдд рд░реАрдб рд╣реИ: рд▓реЗрдирджреЗрди рдиреЗ рдХрдИ рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдгрд╛рдо рд╕реЗрдЯ (рдкреНрд░реЗрдд рд░рд┐рдХреЙрд░реНрдб рд╡рд╛рд▓реЗ) рдкреНрд░рд╛рдкреНрдд рдХрд┐рдПред
@Transactional(timeout=60)
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд▓реЗрдирджреЗрди рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реИред
рд╕рдордп рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ tx рдкреНрд░рдмрдВрдзрдХ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдХрд┐ рдЧреИрд░-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд▓реЗрдирджреЗрди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ tx рдирд┐рд╖реНрдХреНрд░рд┐рдп рди рд╣реЛ рдЬрд╛рдП, рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред
@Transactional(propagation=Propagation.REQUIRED)
рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╕рд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░
REQUIRED
ред
рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк
REQUIRES_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NEVER
рдФрд░
NESTED
ред
рдЖрд╡рд╢реНрдпрдХрдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓рдХреНрд╖реНрдп рд╡рд┐рдзрд┐ рдПрдХ рд╕рдХреНрд░рд┐рдп tx рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдЯреАрдПрдХреНрд╕ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрд╕реА рдЯреАрдПрдХреНрд╕ рдореЗрдВ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛, рдпрд╛ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдирдпрд╛ рдЯреАрдПрдХреНрд╕ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
REQUIRES_NEW- рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдмрд╛рд░ рд▓рдХреНрд╖реНрдп рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдПрдХ рдирдпрд╛ tx рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ tx рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдПрдХ рдирдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдирд┐рд╡рд╛рд░реНрдп- рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓рдХреНрд╖реНрдп рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп tx рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ tx рдЬрд╛рд░реА рдирд╣реАрдВ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ- рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓рдХреНрд╖реНрдп рд╡рд┐рдзрд┐ рдХреЛ tx рдХреЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ tx рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрд╕реА tx рдореЗрдВ рднрд╛рдЧ рд▓реЗрдЧрд╛ред рдпрджрд┐ tx рдХреЗ рдмрд┐рдирд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рддрдм рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред
- рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЗ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИрдВред
NOT_SUPPORTED- рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓рдХреНрд╖реНрдп рд╡рд┐рдзрд┐ рдХреЛ рд▓реЗрдирджреЗрди рд╕рдВрджрд░реНрдн рдкреНрд░рд╕рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
- рдореВрд▓ рд░реВрдк рд╕реЗ, рдЙрди рддрд░реАрдХреЛрдВ рдХреЛ рдПрдХ рд▓реЗрдирджреЗрди рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЛ рд░реИрдо рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИрдВред
рдХрднреА рдирд╣реАрдВ- рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓рдХреНрд╖реНрдп рдкрджреНрдзрддрд┐ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдЧреА рдпрджрд┐ рдПрдХ рд▓реЗрдирджреЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣реИ рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
@Transactional (rollbackFor=Exception.class)
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди:
rollbackFor=RunTimeException.class
рд╡рд╕рдВрдд рдореЗрдВ, рд╕рднреА рдПрдкреАрдЖрдИ рдХрдХреНрд╖рд╛рдПрдВ рдПрдХ RuntimeException рдлреЗрдВрдХрддреА рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рд╡рд┐рдзрд┐ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдХрдВрдЯреЗрдирд░ рд╣рдореЗрд╢рд╛ рд╡рд░реНрддрдорд╛рди рд▓реЗрдирджреЗрди рдХреЛ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░рддрд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ рдЬрд╛рдБрдЪ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░,
Checked Exception
рд╣реЛрдиреЗ рдкрд░, рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЗрди-рджреЗрди рдХреЛ рд╡рд╛рдкрд╕ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
@Transactional (noRollbackFor=IllegalStateException.class)
рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рд▓рдХреНрд╖реНрдп рд╡рд┐рдзрд┐ рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЛ рдЙрдард╛рддреА рд╣реИ рддреЛ рд░реЛрд▓рдмреИрдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдм, рд▓реЗрди-рджреЗрди рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдЕрдВрддрд┐рдо рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрджрдо
@Transactiona
l рдПрдиреЛрдЯреЗрд╢рди рдкреЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рднреНрд░рдо рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдПрдиреЛрдЯреЗрд╢рди рдХрд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рд╕реЗрд╡рд╛ рд╕реНрддрд░ рдкрд░ рдпрд╛ рдбреАрдПрдУ рд╕реНрддрд░ рдкрд░?
@Transactional
: рд╕реЗрд╡рд╛ рдпрд╛ DAO рд╕реНрддрд░?рд╕реЗрд╡рд╛
@Transactional
рд╕реНрдерд╛рди
@Transactional
рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реИ, рд╕реЗрд╡рд╛ рд╕реНрддрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдкрд░реНрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕реНрддрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд▓реЗрдирджреЗрди рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред
рдХрдИ CRUD рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ рдПрдХ рд╕реЗрд╡рд╛ рд╕реНрддрд░ рд╣реИ рдЬреЛ рдмрд╕ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдФрд░ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдо рд▓реЗрди-рджреЗрди рдПрдиреЛрдЯреЗрд╢рди рдХреЛ DAO рд╕реНрддрд░ рдкрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рднреА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЖрдкрдХреЗ рдКрдкрд░ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк DAO рд▓реЗрдпрд░ рдореЗрдВ
@Transactional
рдХреЛ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЖрдкрдХреА DAO рд▓реЗрдпрд░ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рддреЛ рдЗрд╕реЗ DAO рд▓реЗрдпрд░ рдореЗрдВ рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
рдпрджрд┐ рдЖрдкрдХрд╛ рд╕реЗрд╡рд╛ рд╕реНрддрд░ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдбреЛрдореЗрди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдЖрд▓рд╕реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд┐рд╕ рд▓реЗрд╡рд▓ рдкрд░ рд▓реЗрди-рджреЗрди рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЖрдк ORM рджреНрд╡рд╛рд░рд╛ рдлреЗрдВрдХреЗ рдЧрдП LazyInitializationException рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗред
рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХрд╛ рд╕реЗрд╡рд╛ рд╕реНрддрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреАрдПрдУ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдкрд╣рд▓рд╛ DAO рдСрдкрд░реЗрд╢рди рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛, рддреЛ рдЕрдиреНрдп рджреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдЕрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдВрдЧреЗред рд╕реЗрд╡рд╛ рд╕реНрддрд░ рдПрдиреЛрдЯреЗрд╢рди рдЖрдкрдХреЛ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдЖрдкрдХреА рдорджрдж рдХреАред
рдЕрдВрдд
рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдпрд╛ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╣рдореЗрд╢рд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрддрд╛ рд╣реИред