Interface Mutiny.StatelessSession

All Superinterfaces:
Mutiny.Closeable, Mutiny.QueryProducer
All Known Implementing Classes:
MutinyStatelessSessionDelegator
Enclosing interface:
Mutiny

public static interface Mutiny.StatelessSession extends Mutiny.QueryProducer, Mutiny.Closeable
A non-blocking counterpart to the Hibernate StatelessSession interface, which provides a command-oriented API for performing bulk operations against a database.

A stateless session does not implement a first-level cache nor interact with any second-level cache, nor does it implement transactional write-behind or automatic dirty checking, nor do operations cascade to associated instances. Changes to many to many associations and element collections may not be made persistent in a stateless session. Operations performed via a stateless session bypass Hibernate's event model and interceptors.

For certain kinds of work, a stateless session may perform slightly better than a stateful session.

In particular, for a session which loads many entities, use of a StatelessSession alleviates the need to call:

Stateless sessions are vulnerable to data aliasing effects, due to the lack of a first-level cache.

See Also:
  • Method Details

    • get

      <T> io.smallrye.mutiny.Uni<T> get(Class<T> entityClass, Object id)
      Retrieve a row.
      Parameters:
      entityClass - The class of the entity to retrieve
      id - The id of the entity to retrieve
      Returns:
      a detached entity instance, via a Uni
      See Also:
    • get

      <T> io.smallrye.mutiny.Uni<List<T>> get(Class<T> entityClass, Object... ids)
      Retrieve multiple rows.
      Parameters:
      entityClass - The class of the entity to retrieve
      ids - The ids of the entities to retrieve
      Returns:
      a list of detached entity instances, via a Uni
      See Also:
    • get

      <T> io.smallrye.mutiny.Uni<T> get(Class<T> entityClass, Object id, LockMode lockMode)
      Retrieve a row, obtaining the specified lock mode.
      Parameters:
      entityClass - The class of the entity to retrieve
      id - The id of the entity to retrieve
      lockMode - The lock mode to apply to the entity
      Returns:
      a detached entity instance, via a Uni
      See Also:
    • get

      default <T> io.smallrye.mutiny.Uni<T> get(Class<T> entityClass, Object id, jakarta.persistence.LockModeType lockModeType)
      Retrieve a row, obtaining the specified lock mode.
      Parameters:
      entityClass - The class of the entity to retrieve
      id - The id of the entity to retrieve
      lockModeType - The lock mode to apply to the entity
      Returns:
      a detached entity instance, via a Uni
      See Also:
    • get

      <T> io.smallrye.mutiny.Uni<T> get(jakarta.persistence.EntityGraph<T> entityGraph, Object id)
      Retrieve a row, using the given EntityGraph as a fetch plan.
      Parameters:
      entityGraph - an EntityGraph specifying the entity and associations to be fetched
      id - The id of the entity to retrieve
      Returns:
      a detached entity instance, via a Uni
    • insert

      io.smallrye.mutiny.Uni<Void> insert(Object entity)
      Insert a row.
      Parameters:
      entity - a new transient instance
      See Also:
    • insertAll

      io.smallrye.mutiny.Uni<Void> insertAll(Object... entities)
      Insert multiple rows, using the number of the given entities as the batch size.
      Parameters:
      entities - new transient instances
      See Also:
    • insertAll

      io.smallrye.mutiny.Uni<Void> insertAll(int batchSize, Object... entities)
      Insert multiple rows using the specified batch size.
      Parameters:
      batchSize - the batch size
      entities - new transient instances
      See Also:
    • insertMultiple

      io.smallrye.mutiny.Uni<Void> insertMultiple(List<?> entities)
      Insert multiple rows, using the size of the given list as the batch size.
      Parameters:
      entities - new transient instances
      See Also:
    • delete

      io.smallrye.mutiny.Uni<Void> delete(Object entity)
      Delete a row.
      Parameters:
      entity - a detached entity instance
      See Also:
    • deleteAll

      io.smallrye.mutiny.Uni<Void> deleteAll(Object... entities)
      Delete multiple rows, using the number of the given entities as the batch size.
      Parameters:
      entities - detached entity instances
      See Also:
    • deleteAll

      io.smallrye.mutiny.Uni<Void> deleteAll(int batchSize, Object... entities)
      Delete multiple rows.
      Parameters:
      batchSize - the batch size
      entities - detached entity instances
      See Also:
    • deleteMultiple

      io.smallrye.mutiny.Uni<Void> deleteMultiple(List<?> entities)
      Delete multiple rows, using the size of the given list as the batch size.
      Parameters:
      entities - detached entity instances
      See Also:
    • update

      io.smallrye.mutiny.Uni<Void> update(Object entity)
      Update a row.
      Parameters:
      entity - a detached entity instance
      See Also:
    • updateAll

      io.smallrye.mutiny.Uni<Void> updateAll(Object... entities)
      Update multiple rows, using the number of the given entities as the batch size.
      Parameters:
      entities - detached entity instances
      See Also:
    • updateAll

      io.smallrye.mutiny.Uni<Void> updateAll(int batchSize, Object... entities)
      Update multiple rows.
      Parameters:
      batchSize - the batch size
      entities - detached entity instances
      See Also:
    • updateMultiple

      io.smallrye.mutiny.Uni<Void> updateMultiple(List<?> entities)
      Update multiple rows, using the size of the given list as the batch size.
      Parameters:
      entities - detached entity instances
      See Also:
    • upsert

      @Incubating io.smallrye.mutiny.Uni<Void> upsert(Object entity)
      Use a SQL merge into statement to perform an upsert.
      Parameters:
      entity - a detached entity instance
      See Also:
    • upsertAll

      @Incubating io.smallrye.mutiny.Uni<Void> upsertAll(Object... entities)
      Use a SQL merge into statement to perform an upsert on multiple rows using the size of the given array as batch size.
      Parameters:
      entities - the entities to upsert
      See Also:
    • upsertAll

      @Incubating io.smallrye.mutiny.Uni<Void> upsertAll(int batchSize, Object... entities)
      Use a SQL merge into statement to perform an upsert on multiple rows using the specified batch size.
      Parameters:
      batchSize - the batch size
      entities - the list of entities to upsert
      See Also:
    • upsertMultiple

      @Incubating io.smallrye.mutiny.Uni<Void> upsertMultiple(List<?> entities)
      Use a SQL merge into statement to perform an upsert on multiple rows using the size of the given list as batch size.
      Parameters:
      entities - the entities to upsert
      See Also:
    • refresh

      io.smallrye.mutiny.Uni<Void> refresh(Object entity)
      Refresh the entity instance state from the database.
      Parameters:
      entity - The entity to be refreshed.
      See Also:
    • refreshAll

      io.smallrye.mutiny.Uni<Void> refreshAll(Object... entities)
      Refresh the entity instance state from the database, using the number of the given entities as the batch size.
      Parameters:
      entities - The entities to be refreshed.
      See Also:
    • refreshAll

      io.smallrye.mutiny.Uni<Void> refreshAll(int batchSize, Object... entities)
      Refresh the entity instance state from the database using the selected batch size.
      Parameters:
      batchSize - the batch size
      entities - The entities to be refreshed.
      See Also:
    • refreshMultiple

      io.smallrye.mutiny.Uni<Void> refreshMultiple(List<?> entities)
      Refresh the entity instance state from the database using the size of the given list as the batch size.
      Parameters:
      entities - The entities to be refreshed.
      See Also:
    • refresh

      io.smallrye.mutiny.Uni<Void> refresh(Object entity, LockMode lockMode)
      Refresh the entity instance state from the database.
      Parameters:
      entity - The entity to be refreshed.
      lockMode - The LockMode to be applied.
      See Also:
    • refresh

      default io.smallrye.mutiny.Uni<Void> refresh(Object entity, jakarta.persistence.LockModeType lockModeType)
      Refresh the entity instance state from the database.
      Parameters:
      entity - The entity to be refreshed.
      lockModeType - The LockMode to be applied.
      See Also:
    • fetch

      <T> io.smallrye.mutiny.Uni<T> fetch(T association)
      Asynchronously fetch an association that's configured for lazy loading.
       session.fetch(author.getBook()).thenAccept(book -> print(book.getTitle()))
       

      Warning: this operation in a stateless session is quite sensitive to data aliasing effects and should be used with great care.

      Parameters:
      association - a lazy-loaded association
      Returns:
      the fetched association, via a Uni
      See Also:
    • getIdentifier

      Object getIdentifier(Object entity)
      Return the identifier value of the given entity, which may be detached.
      Parameters:
      entity - a persistent instance associated with this session
      Returns:
      the identifier
      Since:
      3.0
    • withTransaction

      <T> io.smallrye.mutiny.Uni<T> withTransaction(Function<Mutiny.Transaction,io.smallrye.mutiny.Uni<T>> work)
      Performs the given work within the scope of a database transaction, automatically flushing the session. The transaction will be rolled back if the work completes with an uncaught exception, or if Mutiny.Transaction.markForRollback() is called.
    • If there is already a transaction associated with this session, the work is executed in the context of the existing transaction, and no new transaction is initiated.
    • If there is no transaction associated with this session, a new transaction is started, and the work is executed in the context of the new transaction.
    • Parameters:
      work - a function which accepts Mutiny.Transaction and returns the result of the work as a Uni.
      See Also:
    • currentTransaction

      Mutiny.Transaction currentTransaction()
      Obtain the transaction currently associated with this session, if any.
      Returns:
      the Mutiny.Transaction, or null if no transaction was started using withTransaction(Function).
      See Also:
    • isOpen

      boolean isOpen()
      Returns:
      false if close() has been called
    • close

      io.smallrye.mutiny.Uni<Void> close()
      Close the reactive session and release the underlying database connection.
      Specified by:
      close in interface Mutiny.Closeable
    • getFactory

      Mutiny.SessionFactory getFactory()
      The Mutiny.SessionFactory which created this session.