Changes between Version 1 and Version 2 of Transactions


Ignore:
Timestamp:
08/18/25 21:16:32 (32 hours ago)
Author:
221012
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Transactions

    v1 v2  
    11= Трансакции
    22
    3 == Трансакција за креирање на изнајмување
     3== 1. Трансакција за креирање на изнајмување
    44
    55{{{
     
    7474
    7575`DURABILITY` се постигнува автоматски кога методот завршува успешно без фрлање на исклучок. Во тој случај, Spring автоматски врши COMMIT операција и сите промени трајно се зачувуваат во базата на податоци.
     76
     77== 2. Трансакција за оценување на корисник
     78{{{
     79@Transactional
     80    public void updateUserRating(Long userId, BigDecimal newRating) {
     81        UserD user = userRepository.findById(userId)
     82                .orElseThrow(() -> new IllegalArgumentException("User not found"));
     83
     84        if (user.getRating().compareTo(BigDecimal.ZERO) == 0) {
     85            user.setRating(newRating);
     86        } else {
     87            BigDecimal average = user.getRating()
     88                    .add(newRating)
     89                    .divide(BigDecimal.valueOf(2), 2, RoundingMode.HALF_UP);
     90            user.setRating(average);
     91        }
     92        userRepository.save(user);
     93    }
     94}}}
     95Методот updateUserRating() е анотиран со `@Transactional` бидејќи содржи две поврзани операции кои мора да се извршат како една атомска единица: прво се чита тековната оценка на корисникот од базата, потоа се пресметува новата просечна оценка. Доколку овој метод не претставуваше трансакција можеше да се случи следново: два корисника истовремено да му постават оценка на ист корисник што би резултирало со загуба на една од оценките.