/** * Set the lock mode to use. * * @param lockMode The lock mode to use * * @return {@code this}, for method chaining */ public DetachedCriteria setLockMode(LockMode lockMode) { criteria.setLockMode( lockMode ); return this; }
/** * Set an alias-specific lock mode. The specified lock mode applies only to that alias. * * @param alias The alias to apply the lock to * @param lockMode The lock mode to use. * * @return {@code this}, for method chaining */ public DetachedCriteria setLockMode(String alias, LockMode lockMode) { criteria.setLockMode( alias, lockMode ); return this; }
protected T findOneByCriterionWithLock(Criterion criterion, LockMode lockMode) { String className = getSimpleClassName(); LOG.trace("Searching {} entity by criterion [{}] ", className, criterion); Criteria criteria = getCriteria(); criteria.setLockMode(lockMode); criteria.add(criterion); return (T) criteria.uniqueResult(); }
@Test public void testCriteria() { Session session = openSession(); session.beginTransaction(); Criteria criteria = session.createCriteria( Door.class ); criteria.setLockMode( LockMode.PESSIMISTIC_WRITE ); criteria.setFirstResult( 2 ); criteria.setMaxResults( 2 ); @SuppressWarnings("unchecked") List<Door> results = criteria.list(); assertEquals( 2, results.size() ); for ( Door door : results ) { assertEquals( LockMode.PESSIMISTIC_WRITE, session.getCurrentLockMode( door ) ); } session.getTransaction().commit(); session.close(); }
@Test public void testLegacyCriteriaAliasSpecific() { // open a session, begin a transaction and lock row doInHibernate( this::sessionFactory, session -> { A it = (A) session.createCriteria( A.class ) .setLockMode( "this", LockMode.PESSIMISTIC_WRITE ) .uniqueResult(); // make sure we got it assertNotNull( it ); // that initial transaction is still active and so the lock should still be held. // Lets open another session/transaction and verify that we cannot update the row nowAttemptToUpdateRow(); } ); }
@Test public void testLegacyCriteria() { // open a session, begin a transaction and lock row doInHibernate( this::sessionFactory, session -> { A it = (A) session.createCriteria( A.class ) .setLockMode( LockMode.PESSIMISTIC_WRITE ) .uniqueResult(); // make sure we got it assertNotNull( it ); // that initial transaction is still active and so the lock should still be held. // Lets open another session/transaction and verify that we cannot update the row nowAttemptToUpdateRow(); } ); }
public DetachedCriteria setLockMode(String alias, LockMode lockMode) { criteria.setLockMode(alias, lockMode); return this; } }
@Override public Criteria setLockMode(LockMode lockMode) { backingCriteria.setLockMode(lockMode); return this; }
@Override public Criteria setLockMode(String alias, LockMode lockMode) { backingCriteria.setLockMode(alias, lockMode); return this; }
public EntityCriteria<T> setLockMode(String alias, LockMode lockMode) { criteria.setLockMode(alias, lockMode); return this; } }
public DetachedCriteria setLockMode(String alias, LockMode lockMode) { criteria.setLockMode(alias, lockMode); return this; } }
@Override public Criteria setLockMode(final LockMode lockMode) { return criteria.setLockMode(lockMode); }
@Override public Criteria setLockMode(final String alias, final LockMode lockMode) { return criteria.setLockMode(alias, lockMode); }
public EntityCriteria<T> setLockMode(LockMode lockMode) { criteria.setLockMode(lockMode); return this; }
public DetachedCriteria setLockMode(LockMode lockMode) { criteria.setLockMode(lockMode); return this; }
public DetachedCriteria setLockMode(LockMode lockMode) { criteria.setLockMode(lockMode); return this; }
@Override public Criteria setLockMode(final LockMode lockMode) { criteria.setLockMode(LockModeAdapter.adapt(lockMode)); return this; }
@Override public Criteria setLockMode(final String alias, final LockMode lockMode) { criteria.setLockMode(alias, LockModeAdapter.adapt(lockMode)); return this; }
// Load from DB Criteria crit = session.createCriteria( Dummy.class ).add( Restrictions.eq("id", 5) ); crit.setLockMode( LockMode.UPGRADE ); // issues a SELECT ... for UPDATE... Dummy val = crit.uniqueResult(); etc.etc
@Override public Query lock(boolean lock) { criteria.setCacheable(false); criteria.setLockMode(LockMode.PESSIMISTIC_WRITE); return super.lock(lock); }