Interface SharedStatelessSessionBuilder
- All Superinterfaces:
CommonBuilder, CommonSharedBuilder, StatelessSessionBuilder
StatelessSession which shares some options
with another pre-existing parent session.
A child stateless session does not, by default, share the parent's JDBC
connection, transaction coordinator, interceptor, or SQL statement inspector.
Instead, the child stateless session starts from the normal
SessionFactory defaults, with the parent's tenant identifier and JDBC
time zone inherited as the baseline. The parent's interceptor, SQL statement
inspector, connection, and transaction context are inherited only when
explicitly requested by calling interceptor(),
statementInspector(), or connection().
When resource-local transaction management is used:
- by default, each session executes with its own dedicated JDBC connection and therefore has its own isolated transaction, but
- calling the
connection()method specifies that the connection, and therefore also the JDBC transaction, should be shared from parent to child.
try (var statelessSession
= session.statelessWithOptions()
.connection() // share the JDBC connection
.cacheMode(CacheMode.IGNORE)
.openStatelessSession()) {
...
}
On the other hand, when JTA transaction management is used, all sessions
execute within the same transaction. Typically, connection sharing is
handled automatically by the JTA-enabled DataSource.- Since:
- 7.2
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionSpecify the instant for reading temporal entity data.atChangeset(Object changesetId) cacheRetrieveMode(CacheRetrieveMode cacheRetrieveMode) Specify theCacheRetrieveModefor the session.cacheStoreMode(CacheStoreMode cacheStoreMode) Specify theCacheStoreModefor the session.Signifies that the connection from the original session should be used to create the new session.connection(Connection connection) Adds a specific connection to be used to the session options.connectionHandling(ConnectionAcquisitionMode acquisitionMode, ConnectionReleaseMode releaseMode) Specifies the connection handling modes for the session.initialCacheMode(CacheMode cacheMode) Specify the initialCacheModefor the session.Signifies the interceptor from the original session should be used to create the new session.interceptor(Interceptor interceptor) Adds a specific interceptor to the session options.jdbcBatchSize(int batchSize) Specifies a session-specific size for JDBC batching, overriding any SessionFactory-level size.jdbcTimeZone(TimeZone timeZone) Specify the JDBC time zone to use for the session.Specifies that noInterceptorshould be used.Specifies that no session-scoped interceptor should be used for the session.Signifies that no SQL statement inspector should be used.open()Open the stateless session.readOnly(boolean readOnly) Specify a read-only mode for the session.Signifies that the SQL statement inspector from the original session should be used to create the new session.statementInspector(UnaryOperator<String> operator) Applies the given statement inspection function to the session.tenantIdentifier(Object tenantIdentifier) Specify the tenant identifier to be associated with the opened session.Methods inherited from interface StatelessSessionBuilder
openStatelessSession, statementInspector
-
Method Details
-
open
Open the stateless session.- Specified by:
openin interfaceCommonBuilder- Specified by:
openin interfaceStatelessSessionBuilder
-
connection
Description copied from interface:CommonSharedBuilderSignifies that the connection from the original session should be used to create the new session. Implies that the overall "transaction context" should be shared as well.- Specified by:
connectionin interfaceCommonSharedBuilder- Returns:
this, for method chaining
-
interceptor
Description copied from interface:CommonSharedBuilderSignifies the interceptor from the original session should be used to create the new session.- Specified by:
interceptorin interfaceCommonSharedBuilder- Returns:
this, for method chaining
-
interceptor
Description copied from interface:CommonBuilderAdds a specific interceptor to the session options.- Specified by:
interceptorin interfaceCommonBuilder- Specified by:
interceptorin interfaceCommonSharedBuilder- Specified by:
interceptorin interfaceStatelessSessionBuilder- Parameters:
interceptor- The interceptor to use.- Returns:
this, for method chaining
-
noInterceptor
Description copied from interface:CommonBuilderSpecifies that noInterceptorshould be used. This indicates to ignore both (if either) the interceptor and session-scoped interceptor associated with theSessionFactory- Specified by:
noInterceptorin interfaceCommonBuilder- Specified by:
noInterceptorin interfaceCommonSharedBuilder- Specified by:
noInterceptorin interfaceStatelessSessionBuilder- Returns:
this, for method chaining
-
noSessionInterceptorCreation
Description copied from interface:CommonBuilderSpecifies that no session-scoped interceptor should be used for the session. If theSessionFactoryhas a configured interceptor, it will still be used.- Specified by:
noSessionInterceptorCreationin interfaceCommonBuilder- Specified by:
noSessionInterceptorCreationin interfaceCommonSharedBuilder- Specified by:
noSessionInterceptorCreationin interfaceStatelessSessionBuilder- Returns:
this, for method chaining- See Also:
-
statementInspector
Description copied from interface:CommonBuilderApplies the given statement inspection function to the session.- Specified by:
statementInspectorin interfaceCommonBuilder- Specified by:
statementInspectorin interfaceCommonSharedBuilder- Specified by:
statementInspectorin interfaceStatelessSessionBuilder- Parameters:
operator- An operator which accepts a SQL string, returning a processed SQL string to be used by Hibernate instead. The operator may simply (and usually) return the original SQL.- Returns:
this, for method chaining
-
statementInspector
Description copied from interface:CommonSharedBuilderSignifies that the SQL statement inspector from the original session should be used to create the new session.- Specified by:
statementInspectorin interfaceCommonSharedBuilder- Returns:
this, for method chaining
-
noStatementInspector
Description copied from interface:CommonBuilderSignifies that no SQL statement inspector should be used.
By default, if no inspector is explicitly specified, the inspector associated with the
SessionFactory, if one, is inherited by the new session.- Specified by:
noStatementInspectorin interfaceCommonBuilder- Specified by:
noStatementInspectorin interfaceCommonSharedBuilder- Specified by:
noStatementInspectorin interfaceStatelessSessionBuilder- Returns:
this, for method chaining
-
tenantIdentifier
Description copied from interface:CommonBuilderSpecify the tenant identifier to be associated with the opened session.
try (var session = sessionFactory.withOptions() .tenantIdentifier(tenantId) .openSession()) { ... }- Specified by:
tenantIdentifierin interfaceCommonBuilder- Specified by:
tenantIdentifierin interfaceCommonSharedBuilder- Specified by:
tenantIdentifierin interfaceStatelessSessionBuilder- Parameters:
tenantIdentifier- The tenant identifier.- Returns:
this, for method chaining
-
readOnly
Description copied from interface:CommonBuilderSpecify a read-only mode for the session. If a session is created in read-only mode, then
Connection.setReadOnly(boolean)is called when a JDBC connection is obtained.Furthermore, if read/write replication is in use, then:
- a read-only session will connect to a read-only replica, but
- a non-read-only session will connect to a writable replica.
When read/write replication is in use, it's strongly recommended that the session be created with the initial cache-mode set to
CacheMode.GET, to avoid writing stale data read from a read-only replica to the second-level cache. Hibernate cannot possibly guarantee that data read from a read-only replica is up to date.When read/write replication is in use, it's possible that an item read from the second-level cache might refer to data which does not yet exist in the read-only replica. In this situation, an exception occurs when the association is fetched. To completely avoid this possibility, the initial cache-mode must be set to
CacheMode.IGNORE. However, it's also usually possible to structure data access code in a way which eliminates this possibility.try (var readOnlySession = sessionFactory.withOptions() .readOnly(true) .initialCacheMode(CacheMode.IGNORE) .openSession()) { ... }If a session is created in read-only mode, then it cannot be changed to read-write mode, and any call to
Session.setDefaultReadOnly(boolean)with fail. On the other hand, if a session is created in read-write mode, then it may later be switched to read-only mode, but all database access is directed to the writable replica.- Specified by:
readOnlyin interfaceCommonBuilder- Specified by:
readOnlyin interfaceCommonSharedBuilder- Specified by:
readOnlyin interfaceStatelessSessionBuilder- Returns:
this, for method chaining- See Also:
-
jdbcBatchSize
Description copied from interface:CommonBuilderSpecifies a session-specific size for JDBC batching, overriding any SessionFactory-level size.- Specified by:
jdbcBatchSizein interfaceCommonBuilder- Specified by:
jdbcBatchSizein interfaceCommonSharedBuilder- Specified by:
jdbcBatchSizein interfaceStatelessSessionBuilder- Returns:
this, for method chaining- See Also:
-
initialCacheMode
Description copied from interface:CommonBuilderSpecify the initialCacheModefor the session.- Specified by:
initialCacheModein interfaceCommonBuilder- Specified by:
initialCacheModein interfaceCommonSharedBuilder- Specified by:
initialCacheModein interfaceStatelessSessionBuilder- Returns:
this, for method chaining- See Also:
-
cacheStoreMode
Description copied from interface:CommonBuilderSpecify theCacheStoreModefor the session.- Specified by:
cacheStoreModein interfaceCommonBuilder- Specified by:
cacheStoreModein interfaceCommonSharedBuilder- Specified by:
cacheStoreModein interfaceStatelessSessionBuilder- Returns:
this, for method chaining
-
cacheRetrieveMode
@Nonnull SharedStatelessSessionBuilder cacheRetrieveMode(@Nullable CacheRetrieveMode cacheRetrieveMode) Description copied from interface:CommonBuilderSpecify theCacheRetrieveModefor the session.- Specified by:
cacheRetrieveModein interfaceCommonBuilder- Specified by:
cacheRetrieveModein interfaceCommonSharedBuilder- Specified by:
cacheRetrieveModein interfaceStatelessSessionBuilder- Returns:
this, for method chaining
-
connection
Description copied from interface:CommonBuilderAdds a specific connection to be used to the session options.- Specified by:
connectionin interfaceCommonBuilder- Specified by:
connectionin interfaceCommonSharedBuilder- Specified by:
connectionin interfaceStatelessSessionBuilder- Parameters:
connection- The connection to use.- Returns:
this, for method chaining
-
connectionHandling
@Nonnull SharedStatelessSessionBuilder connectionHandling(@Nonnull ConnectionAcquisitionMode acquisitionMode, @Nonnull ConnectionReleaseMode releaseMode) Description copied from interface:CommonBuilderSpecifies the connection handling modes for the session.- Specified by:
connectionHandlingin interfaceCommonBuilder- Specified by:
connectionHandlingin interfaceCommonSharedBuilder- Specified by:
connectionHandlingin interfaceStatelessSessionBuilder- Returns:
this, for method chaining
-
jdbcTimeZone
Description copied from interface:CommonBuilderSpecify the JDBC time zone to use for the session.- Specified by:
jdbcTimeZonein interfaceCommonBuilder- Specified by:
jdbcTimeZonein interfaceCommonSharedBuilder- Specified by:
jdbcTimeZonein interfaceStatelessSessionBuilder- Returns:
this, for method chaining
-
asOf
Description copied from interface:StatelessSessionBuilderSpecify the instant for reading temporal entity data. Instances of temporal entities retrieved in the session will represent the revisions effective at the given instant.- Specified by:
asOfin interfaceCommonBuilder- Specified by:
asOfin interfaceCommonSharedBuilder- Specified by:
asOfin interfaceStatelessSessionBuilder- See Also:
-
atChangeset
Description copied from interface:StatelessSessionBuilderSpecify the changeset id for reading temporal or audited entity data. Instances of temporal or audited entities retrieved in the session represent the state effective at the given changeset. The given value should match the type returned by the configured changeset id supplier.- Specified by:
atChangesetin interfaceCommonBuilder- Specified by:
atChangesetin interfaceCommonSharedBuilder- Specified by:
atChangesetin interfaceStatelessSessionBuilder- See Also:
-