...
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.
Manualne zarządzanie transakcjami
Jeżeli potrzebujemy wykonać blok kodu wewnątrz aktywnej transakcji hibernate lub sharkowej oraz mieć dostęp do sesji i transakcji, to należy skorzystać z klasy TransactionWrapper.
Code Block | ||||
---|---|---|---|---|
| ||||
TransactionWrapper.get().doInHibernateTransaction( ( session ) -> { QueryExecutor qe = ComponentFactory.getQueryExecutor(); SQLQuery sql = qe.createSQLQuery( ... ); ... sql.executeUpdate(); }); |
Code Block | ||||
---|---|---|---|---|
| ||||
TransactionWrapper.get().doInSharkTransaction( ( sharkTransaction ) -> { ActivityService activityService = ServiceFactory.getActivityService(); Map<String, Object> activityContext = activityService.getActivityContext( processId, activityId ); activityContext.put( "id_zmiennej", "nowa_wartość" ); activityService.setActivityContext( processId, activityId, activityContext ); }); |
Nasz kod może również zwracać dowolny wynik.
Manualne zarządzanie transakcjami poniżej wersji 3.2.76
...