@Override @SuppressWarnings("unchecked") public QueryImplementor setLockMode(String alias, LockMode lockMode) { lockOptions.setAliasSpecificLockMode( alias, lockMode ); return this; }
/** * Apply the alias specific lock modes. Assumes {@link #canApplyAliasSpecificLockModeHints()} has already been * called and returned {@code true}. * * @param alias The alias to apply the 'lockMode' to. * @param lockMode The LockMode to apply. */ protected void applyAliasSpecificLockModeHint(String alias, LockMode lockMode) { getLockOptions().setAliasSpecificLockMode( alias, lockMode ); }
@SuppressWarnings({"unchecked", "WeakerAccess"}) protected String buildSelectQuery(Dialect dialect) { final String alias = "tbl"; final String query = "select " + StringHelper.qualify( alias, valueColumnName ) + " from " + renderedTableName + ' ' + alias + " where " + StringHelper.qualify( alias, segmentColumnName ) + "=?"; final LockOptions lockOptions = new LockOptions( LockMode.PESSIMISTIC_WRITE ); lockOptions.setAliasSpecificLockMode( alias, LockMode.PESSIMISTIC_WRITE ); final Map updateTargetColumnsMap = Collections.singletonMap( alias, new String[] { valueColumnName } ); return dialect.applyLocksToSql( query, lockOptions, updateTargetColumnsMap ); }
protected LockOptions lockOptions(String aliasToLock) { LockOptions lockOptions = new LockOptions(LockMode.UPGRADE); lockOptions.setAliasSpecificLockMode( aliasToLock, LockMode.UPGRADE ); return lockOptions; }
while ( iter.hasNext() ) { Map.Entry me = (Map.Entry) iter.next(); locks.setAliasSpecificLockMode( getAliasName( (String) me.getKey() ), (LockMode) me.getValue() );
for ( final String key : lockModeMap.keySet() ) { final Criteria subcriteria = getAliasedCriteria( key ); lockOptions.setAliasSpecificLockMode( getSQLAlias( subcriteria ), lockModeMap.get( key ) ); final LockMode lm = subcriteria.getLockMode(); if ( lm != null ) { lockOptions.setAliasSpecificLockMode( getSQLAlias( subcriteria ), lm );
locks.setAliasSpecificLockMode( sqlAlias, effectiveLockMode );
@Test public void testQueryUsingLockOptions() { // todo : need an association here to make sure the alias-specific lock modes are applied correctly doInHibernate( this::sessionFactory, session -> { session.createQuery( "from A a" ) .setLockOptions( new LockOptions( LockMode.PESSIMISTIC_WRITE ) ) .uniqueResult(); session.createQuery( "from A a" ) .setLockOptions( new LockOptions().setAliasSpecificLockMode( "a", LockMode.PESSIMISTIC_WRITE ) ) .uniqueResult(); } ); }
@Test public void testLockTimeoutAliasNoTimeout() { String alias = "a"; assertEquals( " for update", dialect.getForUpdateString( alias, new LockOptions( LockMode.PESSIMISTIC_READ ).setAliasSpecificLockMode( alias, LockMode.PESSIMISTIC_READ ) ) ); assertEquals( " for update", dialect.getForUpdateString( alias, new LockOptions( LockMode.PESSIMISTIC_WRITE ).setAliasSpecificLockMode( alias, LockMode.PESSIMISTIC_WRITE ) ) ); }
@Test public void testLockTimeoutAliasNoWait() { String alias = "a"; assertEquals( " for update nowait", dialect.getForUpdateString( alias, new LockOptions( LockMode.PESSIMISTIC_READ ).setAliasSpecificLockMode( alias, LockMode.PESSIMISTIC_READ ) .setTimeOut( LockOptions.NO_WAIT ) ) ); assertEquals( " for update nowait", dialect.getForUpdateString( alias, new LockOptions( LockMode.PESSIMISTIC_WRITE ).setAliasSpecificLockMode( alias, LockMode.PESSIMISTIC_WRITE ) .setTimeOut( LockOptions.NO_WAIT ) ) ); }
@Test public void testLockTimeoutAliasSkipLocked() { String alias = "a"; assertEquals( " for update skip locked", dialect.getForUpdateString( alias, new LockOptions( LockMode.PESSIMISTIC_READ ).setAliasSpecificLockMode( alias, LockMode.PESSIMISTIC_READ ) .setTimeOut( LockOptions.SKIP_LOCKED ) ) ); assertEquals( " for update skip locked", dialect.getForUpdateString( alias, new LockOptions( LockMode.PESSIMISTIC_WRITE ).setAliasSpecificLockMode( alias, LockMode.PESSIMISTIC_WRITE ) .setTimeOut( LockOptions.SKIP_LOCKED ) ) ); } }
final Lockable drivingPersister = ( Lockable ) getEntityPersisters()[i]; final String rootSqlAlias = drivingPersister.getRootTableAlias( drivingSqlAliases[i] ); locks.setAliasSpecificLockMode( rootSqlAlias, lockMode ); if ( keyColumnNames != null ) { keyColumnNames.put( rootSqlAlias, drivingPersister.getRootTableIdentifierColumnNames() );
public Query setLockMode(String alias, LockMode lockMode) { lockOptions.setAliasSpecificLockMode( alias, lockMode ); return this; }
/** * Apply the alias specific lock modes. Assumes {@link #canApplyAliasSpecificLockModes()} has already been * called and returned {@code true}. * * @param alias The alias to apply the 'lockMode' to. * @param lockMode The LockMode to apply. */ protected void applyAliasSpecificLockModeHint(String alias, LockMode lockMode) { getLockOptions().setAliasSpecificLockMode( alias, lockMode ); }
@Override protected void applyAliasSpecificLockMode(String alias, LockMode lockMode) { ( (org.hibernate.internal.QueryImpl) query ).getLockOptions().setAliasSpecificLockMode( alias, lockMode ); }
protected String buildSelectQuery(Dialect dialect) { final String alias = "tbl"; String query = "select " + StringHelper.qualify( alias, valueColumnName ) + " from " + tableName + ' ' + alias + " where " + StringHelper.qualify( alias, segmentColumnName ) + "=?"; LockOptions lockOptions = new LockOptions( LockMode.PESSIMISTIC_WRITE ); lockOptions.setAliasSpecificLockMode( alias, LockMode.PESSIMISTIC_WRITE ); Map updateTargetColumnsMap = Collections.singletonMap( alias, new String[] { valueColumnName } ); return dialect.applyLocksToSql( query, lockOptions, updateTargetColumnsMap ); }
protected String buildSelectQuery(Dialect dialect) { final String alias = "tbl"; String query = "select " + StringHelper.qualify( alias, valueColumnName ) + " from " + tableName + ' ' + alias + " where " + StringHelper.qualify( alias, segmentColumnName ) + "=?"; LockOptions lockOptions = new LockOptions( LockMode.PESSIMISTIC_WRITE ); lockOptions.setAliasSpecificLockMode( alias, LockMode.PESSIMISTIC_WRITE ); Map updateTargetColumnsMap = Collections.singletonMap( alias, new String[] { valueColumnName } ); return dialect.applyLocksToSql( query, lockOptions, updateTargetColumnsMap ); }
protected String buildSelectQuery(Dialect dialect) { final String alias = "tbl"; String query = "select " + StringHelper.qualify(alias, valueColumnName) + " from " + tableName + ' ' + alias + " where " + StringHelper.qualify(alias, segmentColumnName) + "=?"; LockOptions lockOptions = new LockOptions(LockMode.PESSIMISTIC_WRITE); lockOptions.setAliasSpecificLockMode(alias, LockMode.PESSIMISTIC_WRITE); Map updateTargetColumnsMap = Collections.singletonMap(alias, new String[]{valueColumnName}); return dialect.applyLocksToSql(query, lockOptions, updateTargetColumnsMap); }
@SuppressWarnings({"unchecked", "WeakerAccess"}) protected String buildSelectQuery(Dialect dialect) { final String alias = "tbl"; final String query = "select " + StringHelper.qualify( alias, valueColumnName ) + " from " + renderedTableName + ' ' + alias + " where " + StringHelper.qualify( alias, segmentColumnName ) + "=?"; final LockOptions lockOptions = new LockOptions( LockMode.PESSIMISTIC_WRITE ); lockOptions.setAliasSpecificLockMode( alias, LockMode.PESSIMISTIC_WRITE ); final Map updateTargetColumnsMap = Collections.singletonMap( alias, new String[] { valueColumnName } ); return dialect.applyLocksToSql( query, lockOptions, updateTargetColumnsMap ); }
@Override @SuppressWarnings("unchecked") public QueryImplementor setLockMode(String alias, LockMode lockMode) { if ( !LockMode.NONE.equals( lockMode ) ) { verifySettingAliasSpecificLockModes(); } getQueryOptions().getLockOptions().setAliasSpecificLockMode( alias, lockMode ); return this; }