Skip to content

Commit 07b3526

Browse files
committed
HHH-19551 - Address deficiencies in pessimistic locking
1 parent b8fc47c commit 07b3526

File tree

4 files changed

+52
-4
lines changed

4 files changed

+52
-4
lines changed

hibernate-core/src/main/java/org/hibernate/dialect/Dialect.java

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,44 @@
228228
import static org.hibernate.internal.util.StringHelper.splitAtCommas;
229229
import static org.hibernate.internal.util.collections.ArrayHelper.EMPTY_STRING_ARRAY;
230230
import static org.hibernate.sql.ast.internal.NonLockingClauseStrategy.NON_CLAUSE_STRATEGY;
231-
import static org.hibernate.type.SqlTypes.*;
231+
import static org.hibernate.type.SqlTypes.ARRAY;
232+
import static org.hibernate.type.SqlTypes.BIGINT;
233+
import static org.hibernate.type.SqlTypes.BINARY;
234+
import static org.hibernate.type.SqlTypes.BLOB;
235+
import static org.hibernate.type.SqlTypes.BOOLEAN;
236+
import static org.hibernate.type.SqlTypes.CHAR;
237+
import static org.hibernate.type.SqlTypes.CLOB;
238+
import static org.hibernate.type.SqlTypes.DATE;
239+
import static org.hibernate.type.SqlTypes.DECIMAL;
240+
import static org.hibernate.type.SqlTypes.DOUBLE;
241+
import static org.hibernate.type.SqlTypes.FLOAT;
242+
import static org.hibernate.type.SqlTypes.INTEGER;
243+
import static org.hibernate.type.SqlTypes.LONG32NVARCHAR;
244+
import static org.hibernate.type.SqlTypes.LONG32VARBINARY;
245+
import static org.hibernate.type.SqlTypes.LONG32VARCHAR;
246+
import static org.hibernate.type.SqlTypes.NCHAR;
247+
import static org.hibernate.type.SqlTypes.NCLOB;
248+
import static org.hibernate.type.SqlTypes.NUMERIC;
249+
import static org.hibernate.type.SqlTypes.NVARCHAR;
250+
import static org.hibernate.type.SqlTypes.REAL;
251+
import static org.hibernate.type.SqlTypes.ROWID;
252+
import static org.hibernate.type.SqlTypes.SMALLINT;
253+
import static org.hibernate.type.SqlTypes.TIME;
254+
import static org.hibernate.type.SqlTypes.TIMESTAMP;
255+
import static org.hibernate.type.SqlTypes.TIMESTAMP_UTC;
256+
import static org.hibernate.type.SqlTypes.TIMESTAMP_WITH_TIMEZONE;
257+
import static org.hibernate.type.SqlTypes.TIME_UTC;
258+
import static org.hibernate.type.SqlTypes.TIME_WITH_TIMEZONE;
259+
import static org.hibernate.type.SqlTypes.TINYINT;
260+
import static org.hibernate.type.SqlTypes.VARBINARY;
261+
import static org.hibernate.type.SqlTypes.VARCHAR;
262+
import static org.hibernate.type.SqlTypes.isCharacterType;
263+
import static org.hibernate.type.SqlTypes.isEnumType;
264+
import static org.hibernate.type.SqlTypes.isFloatOrRealOrDouble;
265+
import static org.hibernate.type.SqlTypes.isIntegral;
266+
import static org.hibernate.type.SqlTypes.isNumericOrDecimal;
267+
import static org.hibernate.type.SqlTypes.isVarbinaryType;
268+
import static org.hibernate.type.SqlTypes.isVarcharType;
232269
import static org.hibernate.type.descriptor.DateTimeUtils.JDBC_ESCAPE_END;
233270
import static org.hibernate.type.descriptor.DateTimeUtils.JDBC_ESCAPE_START_DATE;
234271
import static org.hibernate.type.descriptor.DateTimeUtils.JDBC_ESCAPE_START_TIME;
@@ -2693,19 +2730,21 @@ public void setLockTimeout(Timeout timeout, Connection connection, SessionFactor
26932730
throw new UnsupportedOperationException( "Lock timeout on the JDBC connection is not supported for " + getClass().getSimpleName() );
26942731
}
26952732

2733+
private static final Timeout TESTER_TIMEOUT = Timeout.milliseconds( 2000 );
2734+
26962735
/**
26972736
* Whether this dialect supports specifying timeouts when requesting locks.
26982737
*
2738+
* @return True if this dialect supports specifying lock timeouts.
2739+
*
26992740
* @apiNote Specifically, we are interested here in whether the Dialect supports
27002741
* requesting a lock timeout as part of the {@linkplain LockTimeoutStyle#QUERY SQL query}.
27012742
*
2702-
* @return True if this dialect supports specifying lock timeouts.
2703-
*
27042743
* @deprecated Use {@linkplain #getLockTimeoutStyle(Timeout)} instead.
27052744
*/
27062745
@Deprecated
27072746
public boolean supportsLockTimeouts() {
2708-
return getLockTimeoutStyle( Timeouts.WAIT_FOREVER ) == LockTimeoutStyle.QUERY;
2747+
return getLockTimeoutStyle( TESTER_TIMEOUT ) == LockTimeoutStyle.QUERY;
27092748
}
27102749

27112750
/**

hibernate-core/src/main/java/org/hibernate/dialect/lock/spi/ConnectionLockTimeoutType.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44
*/
55
package org.hibernate.dialect.lock.spi;
66

7+
import org.hibernate.Incubating;
8+
79
/**
810
* Indicates a Dialect's support for lock timeouts on the JDBC connection.
911
*
1012
* @author Steve Ebersole
1113
*/
14+
@Incubating
1215
public enum ConnectionLockTimeoutType {
1316
/**
1417
* Setting lock timeouts on the JDBC connection is not supported.

hibernate-core/src/main/java/org/hibernate/dialect/lock/spi/LockTimeoutStyle.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@
44
*/
55
package org.hibernate.dialect.lock.spi;
66

7+
import org.hibernate.Incubating;
8+
79
/**
810
* Indicates a Dialect's level of support for applying lock timeouts.
911
*
1012
* @see org.hibernate.dialect.Dialect#getLockTimeoutStyle(jakarta.persistence.Timeout)
1113
*
1214
* @author Steve Ebersole
1315
*/
16+
@Incubating
1417
public enum LockTimeoutStyle {
1518
/**
1619
* Indicates that the requested lock timeout is not supported.

hibernate-core/src/main/java/org/hibernate/dialect/lock/spi/OuterJoinLockingType.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@
44
*/
55
package org.hibernate.dialect.lock.spi;
66

7+
import org.hibernate.Incubating;
8+
79
/**
810
* Indicates a Dialect's level of support for applying locks
911
* to select statements with joins.
1012
*
1113
* @author Steve Ebersole
1214
*/
15+
@Incubating
1316
public enum OuterJoinLockingType {
1417
/**
1518
* Locks applied to joins are not supported, generally resulting in an

0 commit comments

Comments
 (0)