@Repository
public class Foo {
@Autowired
private Datasource datasource;
@Autowired
private PlatformTransactionManager transactionManager;
public void doSomethingInTransaction(){
final JdbcTemplate jdbc = new JdbcTemplate(datasource);
TransactionTemplate tt = new TransactionTemplate(transactionManager);
tt.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus status) {
jdbc.update("update blabla");
jdbc.update("update blabla");
return null;
}
});
}
}
Oba updaty budou v transakci. Rollback se dela automaticky pri
vyhozeni Runtime vyjimku, programove se da zavolat na status zavolanim
metody setRollbackOnly. Ve vasem pripade je potreba brat na zretel, ze
DDL prikazy (drop, create, alter) jedou v autocommit modu, takze po
kazdem prikazu je commit nebo v pripade vyjimky rollback. Takze tam
vam zadne cachrovani s transakcema nepomuze.
--
S pozdravem Roman "Dagi" Pichlik
/* http://www.sweb.cz/pichlik/ Blog pro kodery */