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.
Zaleca się stosowanie adnotacji do zarządzania transakcjami w klasach oznaczonych adnotacją @Sevice |
@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.