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

Selezionare per ignorare aggiornamento bloccato dal livello JPA

Hibernate fornisce la modalità di blocco UPGRADE_SKIPLOCKED.

Utilizzando JPA e Hibernate, per produrre un "SKIP_LOCKED" come da Sospensione LockMode documentazione, devi combinare PESSIMISTIC_WRITE JPA LockModeType :

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

e l'impostazione Lock timeout, come ad esempio in persistence.xml per la tua unità di persistenza:

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

(Nota che puoi configurare questo LockMode anche per query complesse)

SKIP LOCKED non fa parte di ANSI SQL. Alcuni RDBMS come i seguenti forniscono questa come caratteristica specifica:

Quindi, con JPA puro, non è possibile specificare un "SKIP LOCKED" nelle query. Infatti, come documentato in LockModeType , JPA 2.1 supporta solo quanto segue:

  • NESSUNO
  • OTTIMISTA
  • OPTIMISTIC_FORCE_INCREMENT
  • INCREMENTO_FORZA_PESSIMISTICA
  • LETTURA_PESSIMISTICA
  • SCRITTURA_PESSIMISTICA
  • LEGGI
  • SCRIVI

Tuttavia, per abilitare SALTA BLOCCATO nella tua query puoi utilizzare queste alternative:

  • Utilizzare funzionalità di implementazione JPA specifiche, come Sospensione LockMode che permette di specificare lo SKIP LOCKED tramite una query JPA, grazie ad una combinazione di PESSIMISTIC_WRITE LockModeType Impostazione specifica del timeout di blocco come descritto sopra
  • Crea una query SQL nativa come hai fatto