Skip to content

Commit d3e9198

Browse files
committed
HHH-19551 - Address deficiencies in pessimistic locking
1 parent 230c45b commit d3e9198

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
@@ -227,7 +227,44 @@
227227
import static org.hibernate.internal.util.StringHelper.splitAtCommas;
228228
import static org.hibernate.internal.util.collections.ArrayHelper.EMPTY_STRING_ARRAY;
229229
import static org.hibernate.sql.ast.internal.NonLockingClauseStrategy.NON_CLAUSE_STRATEGY;
230-
import static org.hibernate.type.SqlTypes.*;
230+
import static org.hibernate.type.SqlTypes.ARRAY;
231+
import static org.hibernate.type.SqlTypes.BIGINT;
232+
import static org.hibernate.type.SqlTypes.BINARY;
233+
import static org.hibernate.type.SqlTypes.BLOB;
234+
import static org.hibernate.type.SqlTypes.BOOLEAN;
235+
import static org.hibernate.type.SqlTypes.CHAR;
236+
import static org.hibernate.type.SqlTypes.CLOB;
237+
import static org.hibernate.type.SqlTypes.DATE;
238+
import static org.hibernate.type.SqlTypes.DECIMAL;
239+
import static org.hibernate.type.SqlTypes.DOUBLE;
240+
import static org.hibernate.type.SqlTypes.FLOAT;
241+
import static org.hibernate.type.SqlTypes.INTEGER;
242+
import static org.hibernate.type.SqlTypes.LONG32NVARCHAR;
243+
import static org.hibernate.type.SqlTypes.LONG32VARBINARY;
244+
import static org.hibernate.type.SqlTypes.LONG32VARCHAR;
245+
import static org.hibernate.type.SqlTypes.NCHAR;
246+
import static org.hibernate.type.SqlTypes.NCLOB;
247+
import static org.hibernate.type.SqlTypes.NUMERIC;
248+
import static org.hibernate.type.SqlTypes.NVARCHAR;
249+
import static org.hibernate.type.SqlTypes.REAL;
250+
import static org.hibernate.type.SqlTypes.ROWID;
251+
import static org.hibernate.type.SqlTypes.SMALLINT;
252+
import static org.hibernate.type.SqlTypes.TIME;
253+
import static org.hibernate.type.SqlTypes.TIMESTAMP;
254+
import static org.hibernate.type.SqlTypes.TIMESTAMP_UTC;
255+
import static org.hibernate.type.SqlTypes.TIMESTAMP_WITH_TIMEZONE;
256+
import static org.hibernate.type.SqlTypes.TIME_UTC;
257+
import static org.hibernate.type.SqlTypes.TIME_WITH_TIMEZONE;
258+
import static org.hibernate.type.SqlTypes.TINYINT;
259+
import static org.hibernate.type.SqlTypes.VARBINARY;
260+
import static org.hibernate.type.SqlTypes.VARCHAR;
261+
import static org.hibernate.type.SqlTypes.isCharacterType;
262+
import static org.hibernate.type.SqlTypes.isEnumType;
263+
import static org.hibernate.type.SqlTypes.isFloatOrRealOrDouble;
264+
import static org.hibernate.type.SqlTypes.isIntegral;
265+
import static org.hibernate.type.SqlTypes.isNumericOrDecimal;
266+
import static org.hibernate.type.SqlTypes.isVarbinaryType;
267+
import static org.hibernate.type.SqlTypes.isVarcharType;
231268
import static org.hibernate.type.descriptor.DateTimeUtils.JDBC_ESCAPE_END;
232269
import static org.hibernate.type.descriptor.DateTimeUtils.JDBC_ESCAPE_START_DATE;
233270
import static org.hibernate.type.descriptor.DateTimeUtils.JDBC_ESCAPE_START_TIME;
@@ -2682,19 +2719,21 @@ public void setLockTimeout(Timeout timeout, Connection connection, SessionFactor
26822719
throw new UnsupportedOperationException( "Lock timeout on the JDBC connection is not supported for " + getClass().getSimpleName() );
26832720
}
26842721

2722+
private static final Timeout TESTER_TIMEOUT = Timeout.milliseconds( 2000 );
2723+
26852724
/**
26862725
* Whether this dialect supports specifying timeouts when requesting locks.
26872726
*
2727+
* @return True if this dialect supports specifying lock timeouts.
2728+
*
26882729
* @apiNote Specifically, we are interested here in whether the Dialect supports
26892730
* requesting a lock timeout as part of the {@linkplain LockTimeoutStyle#QUERY SQL query}.
26902731
*
2691-
* @return True if this dialect supports specifying lock timeouts.
2692-
*
26932732
* @deprecated Use {@linkplain #getLockTimeoutStyle(Timeout)} instead.
26942733
*/
26952734
@Deprecated
26962735
public boolean supportsLockTimeouts() {
2697-
return getLockTimeoutStyle( Timeouts.WAIT_FOREVER ) == LockTimeoutStyle.QUERY;
2736+
return getLockTimeoutStyle( TESTER_TIMEOUT ) == LockTimeoutStyle.QUERY;
26982737
}
26992738

27002739
/**

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)