Comment spécifier @verrouillage de délai d'attente dans spring data jpa requête?
Comment spécifier @lock
délai d'attente d'une requête.
Je suis de l'utilisation d'oracle 11g, j'espère que je peux utiliser quelque chose comme 'select id from table where id = ?1 for update wait 5'
.
J'ai défini la méthode de ce genre,
@Lock(LockModeType.PESSIMISTIC_WRITE)
Stock findById(String id);
il semble serrure à jamais.
j'ai mis javax.persistence.lock.timeout=0
dans LocalContainerEntityManagerFactoryBean.jpaProperties
, mais non effectuée.
Vous devez vous connecter pour publier un commentaire.
Pour le Printemps de Données 1.6 ou supérieure
@Lock
est pris en charge sur les méthodes CRUD à partir de la version 1.6 de Spring Data JPA (en fait, il y a déjà un étape disponibles). Voir ce billet pour plus de détails.Avec cette version, il vous suffit de déclarer les éléments suivants:
Ce sera la cause de la CRASSE de la mise en œuvre de la partie de la sauvegarde du référentiel de proxy pour appliquer la configuration de la LockModeType à la
find(…)
appel sur leEntityManager
.D'autre part,
Pour la précédente version de Printemps de Données 1.6
Le Printemps de Données pessimiste
@Lock
annotations ne s'appliquent (comme vous l'avez souligné) pour les requêtes. Il n'y a pas d'annotations, je sais de qui peut affecter l'ensemble de la transaction. Vous pouvez soit créer unfindByOnePessimistic
méthode qui appellefindByOne
avec un verrouillage pessimiste ou vous pouvez changerfindByOne
pour toujours obtenir un verrouillage pessimiste.Si vous vouliez mettre en place votre propre solution vous pourrait probablement. Sous le capot de la
@Lock
annotation est traitée parLockModePopulatingMethodIntercceptor
qui effectue les opérations suivantes:Vous pouvez créer statique gestionnaire de verrous qui avait un
ThreadLocal<LockMode>
variable de membre et ont alors un aspect enroulé autour de chaque méthode dans chaque référentiel appelé bindResource avec le mode de verrouillage mis en ThreadLocal. Cela vous permettra de définir le mode de verrouillage sur une base par thread. Vous pouvez alors créer votre propre@MethodLockMode
annotation qui permettrait d'envelopper la méthode dans un aspect qui définit le thread spécifique au mode de verrouillage avant l'exécution de la méthode et efface après l'exécution de la méthode.Ressources Lien:
Divers Exemple de Verrouillage Pessimiste Délai
Définition d'un Verrouillage Pessimiste
Un objet entité peut être verrouillé explicitement par la méthode de verrouillage:
Le premier argument est un objet entité. Le deuxième argument est le demandé le mode de verrouillage.
Un
TransactionRequiredException
est levée si il n'y a pas de transaction active lorsque le verrouillage est appelé à cause explicite de verrouillage nécessite une transaction active.Un
LockTimeoutException
est levée si la demande de verrouillage pessimiste ne peut être accordée:PESSIMISTIC_READ
demande de verrouillage échoue si un autre utilisateur (qui estreprésenté par un EntityManager exemple) détient actuellement une
PESSIMISTIC_WRITE
de verrouillage de la base de données de l'objet.PESSIMISTIC_WRITE
demande de verrouillage échoue si un autre utilisateur connectédétient, soit un
PESSIMISTIC_WRITE
serrure ou d'unPESSIMISTIC_READ
de verrouillage surque l'objet de base de données.
Réglage De L'Indicateur De Requête (Scopes)
Indicateurs de requête peut être réglé dans les secteurs suivants (du global au local):
Pour l'ensemble de la persistance de l'unité à l'aide d'un
persistence.xml
propriété:Pour un EntityManagerFactory - à l'aide de la
createEntityManagerFacotory
méthode:Pour un EntityManager - à l'aide de la
createEntityManager
méthode:ou à l'aide de la méthode setProperty:
Pour un
named query
définition - à l'aide de lahints
élément:Pour une requête spécifique de l'exécution à l'aide de la
setHint
méthode (avant l'exécution de la requête):Ressources Lien:
Vous pouvez utiliser
@QueryHints
au Printemps de Données:Pour le Printemps de Données de 1,6 ou plus,nous pouvons utiliser @Lock annotations fournies par spring data jpa.
Aussi, Lock le temps peut être réglé à l'aide de @QueryHints. À l'origine, il n'y a pas de support pour l'indicateur de requête annotations en défaut méthodes CRUD, mais son été disponible après correction 1.6M1.
https://jira.spring.io/browse/DATAJPA-173
Ci-dessous est un exemple de Verrouillage Pessimiste avec PESSIMISTIC_WRITE type de mode qui est un verrou exclusif.