Wstęp
Zarządzanie transakcjami jest możliwe za pomocą adnotacji @Transactonal, @UserTransactional, oraz @SharkTransactional. Adnotacje te możemy używać tylko w klasach zarządzanych przez kontekst aplikacji.
- @Transactional - tworzy transakcję Hibernate
- @SharkTransactional - tworzy transakcję SharkTransaction
- @UserTransactional - tworzy transakcję UserTransaction
Dobre praktyki
Zaleca się stosowanie adnotacji do zarządzania transakcjami w klasach oznaczonych adnotacją @Sevice
Przykłady użycia
Wykonanie kilku operacj w jednej transakcji
@Service public class CustomeServiceImpl implements CustomService { @Autowired private PositionService ps; private OrganziationalUnitService ous; @Transactional public void addPositionAndOu(){ Position p=new Position(); p.setName( "name" ); p.setSymbol( "symbol" ); OrganizationalUnit ou=new OrganizationalUnit(); ou.setName( "name" ); ou.setSymbol( "symbol" ); ps.save(p); ous.save( ou ); } public void addPositionAndOuNonTransactional(){ Position p=new Position(); p.setName( "name" ); p.setSymbol( "symbol" ); OrganizationalUnit ou=new OrganizationalUnit(); ou.setName( "name" ); ou.setSymbol( "symbol" ); ps.save(p); ous.save( ou ); } }
W powyższym przykładzie funkcja bez adnotacji @Transactional utworzy osobne transakcje dla każdej funkcji save, natomiast w funkcji oznaczonej @Transactional obie operacje będą działać na jednej tej samej transakcji.
Przydatne zasoby: