Domain models and metadata - Transactions and concurrency - Controlling concurrent access

4 belangrijke vragen over Domain models and metadata - Transactions and concurrency - Controlling concurrent access

Welke LockModeTypes zijn er ivm pessimistisch vergrendelen ?

De PESSIMISTIC_READ-vergrendelingsmodus garandeert herhaalbare leesbewerkingen. JPA standaardiseert ook de PESSIMISTIC_WRITE-modus, met aanvullende garanties: naast herhaalbare leesbewerkingen moet de JPA-provider gegevens toegang serialiseren en mogen er geen fantoomleesbewerkingen optreden.

Hoe werkt een PESSIMISTIC_FORCE_INCREMENT ?

De speciale modus PESSIMISTIC_FORCE_INCREMENT vereist versioneerde entiteiten. In Hibernate voert deze modus een FOR UPDATE NOWAIT-vergrendeling uit (of wat het dialect dan ook ondersteunt; controleer de implementatie van getForUpdateNowaitString()). Vervolgens, direct nadat de query is teruggekeerd, verhoogt Hibernate de versie en voert een UPDATE uit voor elke teruggegeven entiteitsinstantie. Dit geeft aan elke gelijktijdige transactie aan dat we deze rijen hebben bijgewerkt, zelfs als we tot nu toe geen gegevens hebben gewijzigd.

Hoe worden de deadlocks opgelost ?

Gewoonlijk beëindigt het DBMS een van de vastgelopen transacties na een time-outperiode en mislukt deze transactie; de andere transactie kan dan doorgaan. Als alternatief kan het DBMS automatisch een deadlock-situatie detecteren en onmiddellijk een van de transacties annuleren.
  • Hogere cijfers + sneller leren
  • Niets twee keer studeren
  • 100% zeker alles onthouden
Ontdek Study Smart

Hoe werkt de EntityManager#lock() methode?

De lock() methode accepteert een al geladen persistente entiteitsinstantie en een vergrendelingsmodus. Het voert dezelfde vergrendeling uit die je hebt gezien bij find() en een Query, met als enige verschil dat het de instantie niet laadt. Bovendien, als een versioned entity pessimistisch wordt vergrendeld, voert de lock() methode een onmiddellijke versiecontrole op de database uit en kan deze mogelijk een OptimisticLockException genereren. Als de database-representatie niet langer aanwezig is, gooit Hibernate een EntityNotFoundException. Ten slotte accepteert de EntityManager#refresh() methode ook een vergrendelingsmodus, met dezelfde semantiek.

De vragen op deze pagina komen uit de samenvatting van het volgende studiemateriaal:

  • Een unieke studie- en oefentool
  • Nooit meer iets twee keer studeren
  • Haal de cijfers waar je op hoopt
  • 100% zeker alles onthouden
Onthoud sneller, leer beter. Wetenschappelijk bewezen.
Trustpilot-logo