sql >> Database teknologi >  >> RDS >> Oracle

Vælg for opdatering spring låst fra JPA-niveau

Hibernate giver UPGRADE_SKIPLOCKED låsetilstand.

Brug af JPA og Hibernate til at producere en "SKIP_LOCKED" i henhold til Låsetilstand i dvale dokumentation, skal du kombinere PESSIMISTIC_WRITE JPA LockModeType :

entityManager.find(Department.class, 1, LockModeType.PESSIMISTIC_WRITE);

og indstillingen Lås timeout, som for eksempel i persistence.xml for din persistensenhed:

<properties>
   <property name="javax.persistence.query.timeout" value="-2"/>
</properties>

(Bemærk, at du også kan konfigurere denne LockMode til komplekse forespørgsler)

SKIP LOCKED er ikke en del af ANSI SQL. Nogle RDBMS såsom følgende giver dette som en specifik funktion:

Så med ren JPA er det ikke muligt at angive en "SKIP LOCKED" i forespørgsler. Faktisk, som dokumenteret i LockModeType , JPA 2.1 understøtter kun følgende:

  • INGEN
  • OPTIMISTISK
  • OPTIMISTIC_FORCE_INCREMENT
  • PESSIMISTIC_FORCE_INCREMENT
  • PESSIMISTIC_READ
  • PESSIMISTIC_WRITE
  • LÆS
  • SKRIV

For at aktivere SKIP LOCKED i din forespørgsel kan du dog bruge disse alternativer:

  • Brug specifik JPA-implementeringsfunktion, såsom Låsetilstand i dvale som gør det muligt at angive SKIP LOCKED via en JPA-forespørgsel, takket være en kombination af PESSIMISTIC_WRITE LockModeType Lock Timeout specifik indstilling som beskrevet ovenfor
  • Opret en indbygget SQL-forespørgsel, som du gjorde


  1. ORACLE TRIGGER INSERT INTO ... (VÆLG * ...)

  2. MySQL og chancen for, at det forkerte id returneres af LAST_INSERT_ID()

  3. Vis Samlingen i MariaDB

  4. mysqli understøttes ikke i google app-motor med php