Oracle
 sql >> Base de données >  >> RDS >> Oracle

Sélectionnez pour mettre à jour le saut verrouillé à partir du niveau JPA

Hibernate fournit le mode de verrouillage UPGRADE_SKIPLOCKED.

En utilisant JPA et Hibernate, pour produire un "SKIP_LOCKED" selon Mode de verrouillage Hibernation documentation, vous devez combiner les PESSIMISTIC_WRITE JPA LockModeType :

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

et le paramètre Lock timeout, comme par exemple dans persistence.xml pour votre unité de persistance :

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

(Notez que vous pouvez également configurer ce LockMode pour les requêtes complexes)

SKIP LOCKED ne fait pas partie de ANSI SQL. Certains RDBMS tels que les suivants fournissent cela comme une fonctionnalité spécifique :

Donc avec JPA pur, il n'est pas possible de spécifier un "SKIP LOCKED" dans les requêtes. En effet, comme documenté dans LockModeType , JPA 2.1 ne prend en charge que les éléments suivants :

  • AUCUN
  • OPTIMISTIQUE
  • OPTIMISTIC_FORCE_INCREMENT
  • PESSIMISTIC_FORCE_INCREMENT
  • PESSIMISTIC_READ
  • PESSIMISTIC_WRITE
  • LIRE
  • ÉCRIRE

Cependant, pour activer SKIP LOCKED dans votre requête, vous pouvez utiliser ces alternatives :

  • Utilisez une fonctionnalité d'implémentation JPA spécifique, telle que Mode de verrouillage Hibernation qui permet de spécifier le SKIP LOCKED via une requête JPA, grâce à une combinaison de PESSIMISTIC_WRITE LockModeType Lock Timeout paramètre spécifique comme décrit ci-dessus
  • Créez une requête SQL native comme vous l'avez fait