HHH-15682 add ImmutableLockOptions
here we had an amazing idiom: static final instances of a mutable value class
This commit is contained in:
parent
61294250b3
commit
58ba65f529
|
@ -48,13 +48,13 @@ public class LockOptions implements Serializable {
|
||||||
* Represents {@link LockMode#NONE}, to which timeout and scope are
|
* Represents {@link LockMode#NONE}, to which timeout and scope are
|
||||||
* not applicable.
|
* not applicable.
|
||||||
*/
|
*/
|
||||||
public static final LockOptions NONE = new LockOptions(LockMode.NONE);
|
public static final LockOptions NONE = new ImmutableLockOptions(LockMode.NONE);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents {@link LockMode#READ}, to which timeout and scope are
|
* Represents {@link LockMode#READ}, to which timeout and scope are
|
||||||
* not applicable.
|
* not applicable.
|
||||||
*/
|
*/
|
||||||
public static final LockOptions READ = new LockOptions(LockMode.READ);
|
public static final LockOptions READ = new ImmutableLockOptions(LockMode.READ);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents {@link LockMode#PESSIMISTIC_WRITE} with
|
* Represents {@link LockMode#PESSIMISTIC_WRITE} with
|
||||||
|
@ -62,7 +62,7 @@ public class LockOptions implements Serializable {
|
||||||
* {@linkplain PessimisticLockScope#NORMAL no extension of the
|
* {@linkplain PessimisticLockScope#NORMAL no extension of the
|
||||||
* lock to owned collections}.
|
* lock to owned collections}.
|
||||||
*/
|
*/
|
||||||
public static final LockOptions UPGRADE = new LockOptions(LockMode.PESSIMISTIC_WRITE);
|
public static final LockOptions UPGRADE = new ImmutableLockOptions(LockMode.PESSIMISTIC_WRITE);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates that the database should not wait at all to acquire
|
* Indicates that the database should not wait at all to acquire
|
||||||
|
@ -478,4 +478,40 @@ public class LockOptions implements Serializable {
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash( lockMode, timeout, aliasSpecificLockModes, followOnLocking, scope );
|
return Objects.hash( lockMode, timeout, aliasSpecificLockModes, followOnLocking, scope );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class ImmutableLockOptions extends LockOptions {
|
||||||
|
private ImmutableLockOptions(LockMode lockMode) {
|
||||||
|
super(lockMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LockOptions setLockMode(LockMode lockMode) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LockOptions setLockScope(PessimisticLockScope scope) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LockOptions setFollowOnLocking(Boolean followOnLocking) {
|
||||||
|
return super.setFollowOnLocking(followOnLocking);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LockOptions setTimeOut(int timeout) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LockOptions setAliasSpecificLockMode(String alias, LockMode lockMode) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LockOptions setScope(boolean scope) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ public abstract class QueryOptionsAdapter implements QueryOptions {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LockOptions getLockOptions() {
|
public LockOptions getLockOptions() {
|
||||||
return LockOptions.NONE;
|
return new LockOptions();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -421,9 +421,9 @@ public class JdbcSelectExecutorStandardImpl implements JdbcSelectExecutor {
|
||||||
|
|
||||||
final RowReader<R> rowReader = ResultsHelper.createRowReader(
|
final RowReader<R> rowReader = ResultsHelper.createRowReader(
|
||||||
executionContext,
|
executionContext,
|
||||||
// If follow on locking is used, we must omit the lock options here,
|
// If follow-on locking is used, we must omit the lock options here,
|
||||||
// because these lock options are only for Initializers.
|
// because these lock options are only for Initializers.
|
||||||
// If we wouldn't omit this, the follow on lock requests would be no-ops,
|
// If we wouldn't omit this, the follow-on lock requests would be no-ops,
|
||||||
// because the EntityEntrys would already have the desired lock mode
|
// because the EntityEntrys would already have the desired lock mode
|
||||||
deferredResultSetAccess.usesFollowOnLocking()
|
deferredResultSetAccess.usesFollowOnLocking()
|
||||||
? LockOptions.NONE
|
? LockOptions.NONE
|
||||||
|
|
Loading…
Reference in New Issue