Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Transaktioner | Arbete med Databaser
Spring Boot Backend

bookTransaktioner

En transaktion ger oss i huvudsak ett val: antingen slutförs alla operationer inom den framgångsrikt, eller så utförs ingen av dem alls.

Föreställ dig en banköverföring, där pengar flyttas från ett konto till ett annat. Denna process innefattar två steg:

  1. Dra av pengar från ett konto;
  2. Sätta in pengar på ett annat konto.

Om transaktionen misslyckas efter att pengarna dragits av men innan de satts in, kan medlen "förloras." En transaktion säkerställer att båda operationerna antingen slutförs helt eller återställs helt.

Grundläggande om transaktionshantering

@Transactional -annoteringen: Denna används för att deklarera metoder eller klasser som ska köras inom ramen för en transaktion.

När en metod med denna annotering anropas, startar Spring en ny transaktion. Om metoden slutförs utan fel kommer transaktionen att committas; annars rullas den tillbaka.

Här ges ett exempel baserat på det tidigare nämnda verkliga scenariot.

BankService.java

BankService.java

copy
1234567891011121314151617
@Service public class BankService { private AccountRepository accountRepository; @Transactional public void transferMoney(Long fromAccountId, Long toAccountId, double amount) { Account fromAccount = accountRepository.findById(fromAccountId); Account toAccount = accountRepository.findById(toAccountId); fromAccount.withdraw(amount); toAccount.deposit(amount); accountRepository.save(fromAccount); accountRepository.save(toAccount); } }

När metoden transferMoney är markerad med annoteringen @Transactional innebär det att alla ändringar som sker inom denna metod kommer att utföras inom en enda transaktion.

När vi anropar fromAccount.withdraw(amount) följt av toAccount.deposit(amount) måste båda dessa åtgärder slutföras framgångsrikt. Om till exempel ett fel uppstår under operationen toAccount.deposit(amount), kommer transaktionen automatiskt att rulla tillbaka de ändringar som gjordes under steget fromAccount.withdraw(amount).

Detta säkerställer att antingen båda operationerna utförs och pengarna överförs, eller, vid ett fel, att ingen av operationerna utförs, vilket förhindrar någon förlust av medel. Transaktionen garanterar att databasen aldrig lämnas i ett inkonsekvent tillstånd.

Praktisk tillämpning av transaktioner

Sammanfattning

En transaktion är en uppsättning databasoperationer som behandlas som en enhet, vilket säkerställer att alla operationer lyckas tillsammans eller helt rullas tillbaka vid fel. Du kan läsa mer om transaktioner här.

question mark

Vad är en transaction i databassammanhang?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 6

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Awesome!

Completion rate improved to 3.45

bookTransaktioner

Svep för att visa menyn

En transaktion ger oss i huvudsak ett val: antingen slutförs alla operationer inom den framgångsrikt, eller så utförs ingen av dem alls.

Föreställ dig en banköverföring, där pengar flyttas från ett konto till ett annat. Denna process innefattar två steg:

  1. Dra av pengar från ett konto;
  2. Sätta in pengar på ett annat konto.

Om transaktionen misslyckas efter att pengarna dragits av men innan de satts in, kan medlen "förloras." En transaktion säkerställer att båda operationerna antingen slutförs helt eller återställs helt.

Grundläggande om transaktionshantering

@Transactional -annoteringen: Denna används för att deklarera metoder eller klasser som ska köras inom ramen för en transaktion.

När en metod med denna annotering anropas, startar Spring en ny transaktion. Om metoden slutförs utan fel kommer transaktionen att committas; annars rullas den tillbaka.

Här ges ett exempel baserat på det tidigare nämnda verkliga scenariot.

BankService.java

BankService.java

copy
1234567891011121314151617
@Service public class BankService { private AccountRepository accountRepository; @Transactional public void transferMoney(Long fromAccountId, Long toAccountId, double amount) { Account fromAccount = accountRepository.findById(fromAccountId); Account toAccount = accountRepository.findById(toAccountId); fromAccount.withdraw(amount); toAccount.deposit(amount); accountRepository.save(fromAccount); accountRepository.save(toAccount); } }

När metoden transferMoney är markerad med annoteringen @Transactional innebär det att alla ändringar som sker inom denna metod kommer att utföras inom en enda transaktion.

När vi anropar fromAccount.withdraw(amount) följt av toAccount.deposit(amount) måste båda dessa åtgärder slutföras framgångsrikt. Om till exempel ett fel uppstår under operationen toAccount.deposit(amount), kommer transaktionen automatiskt att rulla tillbaka de ändringar som gjordes under steget fromAccount.withdraw(amount).

Detta säkerställer att antingen båda operationerna utförs och pengarna överförs, eller, vid ett fel, att ingen av operationerna utförs, vilket förhindrar någon förlust av medel. Transaktionen garanterar att databasen aldrig lämnas i ett inkonsekvent tillstånd.

Praktisk tillämpning av transaktioner

Sammanfattning

En transaktion är en uppsättning databasoperationer som behandlas som en enhet, vilket säkerställer att alla operationer lyckas tillsammans eller helt rullas tillbaka vid fel. Du kan läsa mer om transaktioner här.

question mark

Vad är en transaction i databassammanhang?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 6
some-alt