Domanda

Io sono il recupero di un elenco di oggetti in Hibernate utilizzando criteri API. Però ho bisogno chiudo su quegli oggetti come un altro thread in esecuzione allo stesso tempo, otterrà gli oggetti esatti e solo uno del filo riuscirà, in assenza di un blocco pessimistico.

ho provato come qui di seguito, ma non funziona.

List esns = session
    .createCriteria(Reddy_Pool.class)
    .add(Restrictions.eq("status", "AVAILABLE"))
    .add(Restrictions.eq("name", "REDDY2"))
    .addOrder(Order.asc("id"))
    .setMaxResults(n)
    .setLockMode(LockMode.PESSIMISTIC_WRITE) //not working at all
    .list();

Aggiorna : sto eseguendo un aggiornamento dopo questa affermazione, in modo che vorrei entrambi i fili di leggere le righe diverse o almeno secondo thread deve aspettare fino a primi Completa filo con la transazione e le foglie della serratura .

E l'ibernazione generato query è al di sotto.

Hibernate: select this_.id as id1_0_, this_.name as name1_0_, 
this_.orderitem_id as orderitem3_1_0_, this_.status as status1_0_, 
this_.store as store1_0_, this_.vendor as vendor1_0_, this_.version as version1_0_ 
from reddy_pool this_ 
where this_.status=? and and this_.name=? order by this_.id asc limit ?

Aggiorna : Sembra un bug nella versione 3.5.2 come Pascal Thivent (Grazie mille Pascal) di cui, ho aderito come membro e guardare il problema. Speriamo che sarà incluso nella prossima release.

Comunque ho provato ad utilizzare un altro approccio qui con session.buildLockRequest() ... ma io non riuscivo a capire come usarlo e usando sotto il codice è non avere alcun effetto a tutti.

for (int i=0; i < n; i++)
    session.buildLockRequest(LockOptions.UPGRADE).lock(esns.get(i));
È stato utile?

Soluzione

Quale versione di Hibernate stai usando? Potrebbe essere questa HHH-5275 ? Sei sicuro che la dichiarazione FOR UPDATE non viene generato? Si può mostrare il codice SQL generato?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top