Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wählen Sie diese Option aus, um die Aktualisierung auf JPA-Ebene zu überspringen

Hibernate bietet den Sperrmodus UPGRADE_SKIPLOCKED.

Verwenden von JPA und Hibernate, um ein „SKIP_LOCKED“ gemäß Ruhezustand-Sperrmodus Dokumentation, müssen Sie PESSIMISTIC_WRITE kombinieren JPA LockModeType :

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

und die Sperrzeitüberschreitungseinstellung, wie zum Beispiel in persistence.xml für Ihre Persistenzeinheit:

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

(Beachten Sie, dass Sie diesen Sperrmodus auch für komplexe Abfragen konfigurieren können)

SKIP LOCKED ist kein Teil von ANSI SQL. Einige RDBMS wie die folgenden stellen dies als spezielles Feature bereit:

Mit reinem JPA ist es also nicht möglich, in Abfragen ein "SKIP LOCKED" anzugeben. Tatsächlich, wie in LockModeType , JPA 2.1 unterstützt nur Folgendes:

  • KEINE
  • OPTIMISTISCH
  • OPTIMISTIC_FORCE_INCREMENT
  • PESSIMISTIC_FORCE_INCREMENT
  • PESSIMISTIC_READ
  • PESSIMISTIC_WRITE
  • LESEN
  • SCHREIBEN

Um jedoch SKIP LOCKED in Ihrer Abfrage zu aktivieren, können Sie diese Alternativen verwenden:

  • Verwenden Sie eine spezifische JPA-Implementierungsfunktion wie LockMode in den Ruhezustand versetzen was es erlaubt, SKIP LOCKED über eine JPA-Abfrage zu spezifizieren, dank einer Kombination aus PESSIMISTIC_WRITE LockModeType Lock Timeout spezifische Einstellung wie oben beschrieben
  • Erstellen Sie wie gewohnt eine native SQL-Abfrage