Interface CommonBuilder

All Known Subinterfaces:
CommonSharedBuilder, SessionBuilder, SessionBuilderImplementor, SharedSessionBuilder, SharedSessionBuilderImplementor, SharedStatelessSessionBuilder, StatelessSessionBuilder
All Known Implementing Classes:
AbstractDelegatingSessionBuilder, AbstractDelegatingSessionBuilderImplementor, AbstractDelegatingSharedSessionBuilder

@Incubating public interface CommonBuilder
Common options for builders of stateful and stateless sessions.
Since:
7.2
  • Method Details

    • connection

      CommonBuilder connection(Connection connection)
      Adds a specific connection to the session options.
      Parameters:
      connection - The connection to use.
      Returns:
      this, for method chaining
    • connectionHandling

      CommonBuilder connectionHandling(ConnectionAcquisitionMode acquisitionMode, ConnectionReleaseMode releaseMode)
      Specifies the connection handling modes for the session.

      Note that if ConnectionAcquisitionMode.IMMEDIATELY is specified, then the release mode must be ConnectionReleaseMode.ON_CLOSE.

      Returns:
      this, for method chaining
      Since:
      7.0
    • interceptor

      CommonBuilder interceptor(Interceptor interceptor)
      Adds a specific interceptor to the session options.
      Parameters:
      interceptor - The interceptor to use.
      Returns:
      this, for method chaining
    • noInterceptor

      CommonBuilder noInterceptor()
      Specifies that no Interceptor should be used.

      By default, if no Interceptor is explicitly specified, the Interceptor associated with the SessionFactory is inherited by the new session. Or, if there is no interceptor associated with the SessionFactory, but a session-scoped interceptor has been configured, a new session-scoped Interceptor will be created for the new session.

      Calling interceptor(null) has the same effect.

      Returns:
      this, for method chaining
    • noSessionInterceptorCreation

      CommonBuilder noSessionInterceptorCreation()
      Specifies that no session-scoped interceptor should be instantiated for the new session.

      By default, if no Interceptor is explicitly specified, and if there is no interceptor associated with the SessionFactory, but a session-scoped interceptor has been configured, a new session-scoped Interceptor will be created for the new session.

      Note that this operation does not disable use of an interceptor associated with the SessionFactory.

      Returns:
      this, for method chaining
      Since:
      7.2
      See Also:
    • statementInspector

      CommonBuilder statementInspector(UnaryOperator<String> operator)
      Applies the given statement inspection function to the session.
      Parameters:
      operator - An operator which accepts a SQL string, returning a processed SQL string to be used by Hibernate instead of the given original SQL. The operator may simply return the original SQL.
      Returns:
      this, for method chaining
    • noStatementInspector

      CommonBuilder noStatementInspector()
      Signifies that no SQL statement inspector should be used.

      By default, if no inspector is explicitly specified, the inspector associated with the SessionFactory is inherited by the new session.

      Calling interceptor(Interceptor) with null has the same effect.

      Returns:
      this, for method chaining
    • tenantIdentifier

      CommonBuilder tenantIdentifier(Object tenantIdentifier)
      Specify the tenant identifier to be associated with the opened session.
       try (var session =
               sessionFactory.withOptions()
                   .tenantIdentifier(tenantId)
                   .openSession()) {
           ...
       }
       
      Parameters:
      tenantIdentifier - The tenant identifier.
      Returns:
      this, for method chaining
    • readOnly

      @Incubating CommonBuilder readOnly(boolean readOnly)
      Specify 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.

      Returns:
      this, for method chaining
      Since:
      7.2
      See Also:
    • initialCacheMode

      CommonBuilder initialCacheMode(CacheMode cacheMode)
      Specify the initial CacheMode for the session.
      Returns:
      this, for method chaining
      Since:
      7.2
      See Also:
    • jdbcTimeZone

      CommonBuilder jdbcTimeZone(TimeZone timeZone)
      Specify the JDBC time zone for the session.
      Returns:
      this, for method chaining