Cześć,
Mam takie dwie metody. Teraz gdy anotacja @Transactional jest za komentowana dla metody fillDatabaseWithData i jest odpalana metoda fillDataBaseWithStocks. Metoda nie jest zawierana w transakcji i do bazy po każdej iteracji leci zapis. Natomiast jak ustawie Transactional nad metodą fillDatabaseWithData cała metoda fillDataBaseWithStocks jest transakcyjna i działa poprawnie, zapis dopiero po skończeniu iteracji. Wytłumaczy mi ktoś dlaczego się tak dzieje?
// @Transactional
public ResponseEntity<Void> fillDatabaseWithData(Type type) {
switch (type) {
case STOCK:
return fillDataBaseWithStocks();
case STOCK_DETAILS:
return fillDataBaseWithStockDetails();
case STOCK_DETAILS_FIVE_MINUTES:
return fillDataBaseWithStockFiveMinutesDetails();
case STOCK_FINANCE_EVENTS:
return fillDataBaseWithStockFinanceEvent();
default:
return new ResponseEntity<Void>(HttpStatus.BAD_REQUEST);
}
}
@Transactional
public ResponseEntity<Void> fillDataBaseWithStocks() {
for (StockTicker element : StockTicker.values()) {
Stock stock = new Stock();
stock.setTicker(element);
stock = stockParser.setNameAndShortName(stock);
stockRepository.save(stock);
}
fillDataStatusRepository.updateType(Type.STOCK.toString());
return new ResponseEntity<Void>(HttpStatus.OK);
}