Interface Mutiny.StatelessSession

All Superinterfaces:
Mutiny.Closeable
All Known Implementing Classes:
MutinyStatelessSessionImpl
Enclosing interface:
Mutiny

public static interface Mutiny.StatelessSession extends 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:
  • StatelessSession
  • 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:
      • StatelessSession.get(Class, Object)
    • 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:
      • StatelessSession.getMultiple(Class, List)
    • get

      <T> io.smallrye.mutiny.Uni<T> get(Class<T> entityClass, Object id, org.hibernate.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:
      • StatelessSession.get(Class, Object, LockMode)
    • 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:
      • StatelessSession.get(Class, Object, LockMode)
    • 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
    • createQuery

      @Deprecated <R> Mutiny.Query<R> createQuery(String queryString)
      Deprecated.
      See explanation in QueryProducer.createSelectionQuery(String)
      Create an instance of Mutiny.Query for the given HQL/JPQL query string or HQL/JPQL update or delete statement. In the case of an update or delete, the returned Mutiny.Query must be executed using Mutiny.MutationQuery.executeUpdate() which returns an affected row count.
      Parameters:
      queryString - The HQL/JPQL query, update or delete statement
      Returns:
      The Mutiny.Query instance for manipulation and execution
      See Also:
    • createQuery

      <R> Mutiny.SelectionQuery<R> createQuery(String queryString, Class<R> resultType)
      Create an instance of Mutiny.SelectionQuery for the given HQL/JPQL query string and query result type.
      Parameters:
      queryString - The HQL/JPQL query
      resultType - the Java type returned in each row of query results
      Returns:
      The Mutiny.Query instance for manipulation and execution
      See Also:
    • createSelectionQuery

      <R> Mutiny.SelectionQuery<R> createSelectionQuery(String queryString, Class<R> resultType)
      Create an instance of Mutiny.SelectionQuery for the given HQL/JPQL query string.
      Parameters:
      queryString - The HQL/JPQL query
      Returns:
      The Mutiny.SelectionQuery instance for manipulation and execution
      See Also:
      • EntityManager.createQuery(String, Class)
    • createMutationQuery

      Mutiny.MutationQuery createMutationQuery(String queryString)
      Create an instance of Mutiny.MutationQuery for the given HQL/JPQL update or delete statement.
      Parameters:
      queryString - The HQL/JPQL query, update or delete statement
      Returns:
      The Mutiny.MutationQuery instance for manipulation and execution
      See Also:
      • EntityManager.createQuery(String)
    • createNamedQuery

      <R> Mutiny.Query<R> createNamedQuery(String queryName)
      Create an instance of Mutiny.Query for the named query.
      Parameters:
      queryName - The name of the query
      Returns:
      The Mutiny.Query instance for manipulation and execution
      See Also:
      • EntityManager.createQuery(String)
    • createNamedQuery

      <R> Mutiny.SelectionQuery<R> createNamedQuery(String queryName, Class<R> resultType)
      Create an instance of Mutiny.SelectionQuery for the named query.
      Parameters:
      queryName - The name of the query
      resultType - the Java type returned in each row of query results
      Returns:
      The Mutiny.SelectionQuery instance for manipulation and execution
      See Also:
      • EntityManager.createQuery(String, Class)
    • createNativeQuery

      <R> Mutiny.Query<R> createNativeQuery(String queryString)
      Create an instance of Mutiny.Query for the given SQL query string, or SQL update, insert, or delete statement. In the case of an update, insert, or delete, the returned Mutiny.Query must be executed using Mutiny.MutationQuery.executeUpdate() which returns an affected row count.
      Parameters:
      queryString - The SQL select, update, insert, or delete statement
      See Also:
    • createNativeQuery

      <R> Mutiny.SelectionQuery<R> createNativeQuery(String queryString, Class<R> resultType)
      Create an instance of Mutiny.SelectionQuery for the given SQL query string, using the given resultType to interpret the results.
      Parameters:
      queryString - The SQL query
      resultType - the Java type returned in each row of query results
      Returns:
      The Mutiny.Query instance for manipulation and execution
      See Also:
    • createNativeQuery

      <R> Mutiny.SelectionQuery<R> createNativeQuery(String queryString, ResultSetMapping<R> resultSetMapping)
      Create an instance of Mutiny.SelectionQuery for the given SQL query string, using the given ResultSetMapping to interpret the result set.
      Parameters:
      queryString - The SQL query
      resultSetMapping - the result set mapping
      Returns:
      The Mutiny.Query instance for manipulation and execution
      See Also:
    • createQuery

      <R> Mutiny.SelectionQuery<R> createQuery(jakarta.persistence.criteria.CriteriaQuery<R> criteriaQuery)
      Create an instance of Mutiny.SelectionQuery for the given criteria query.
      Parameters:
      criteriaQuery - The CriteriaQuery
      Returns:
      The Mutiny.SelectionQuery instance for manipulation and execution
      See Also:
      • EntityManager.createQuery(String)
    • createQuery

      <R> Mutiny.MutationQuery createQuery(jakarta.persistence.criteria.CriteriaUpdate<R> criteriaUpdate)
      Create an instance of Mutiny.MutationQuery for the given criteria update.
      Parameters:
      criteriaUpdate - The CriteriaUpdate
      Returns:
      The Mutiny.MutationQuery instance for manipulation and execution
    • createQuery

      <R> Mutiny.MutationQuery createQuery(jakarta.persistence.criteria.CriteriaDelete<R> criteriaDelete)
      Create an instance of Mutiny.MutationQuery for the given criteria delete.
      Parameters:
      criteriaDelete - The CriteriaDelete
      Returns:
      The Mutiny.MutationQuery instance for manipulation and execution
    • insert

      io.smallrye.mutiny.Uni<Void> insert(Object entity)
      Insert a row.
      Parameters:
      entity - a new transient instance
      See Also:
      • StatelessSession.insert(Object)
    • 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:
      • StatelessSession.insert(Object)
    • 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:
      • StatelessSession.insert(Object)
    • 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:
      • StatelessSession.insert(Object)
    • delete

      io.smallrye.mutiny.Uni<Void> delete(Object entity)
      Delete a row.
      Parameters:
      entity - a detached entity instance
      See Also:
      • StatelessSession.delete(Object)
    • 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:
      • StatelessSession.delete(Object)
    • 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:
      • StatelessSession.delete(Object)
    • 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:
      • StatelessSession.delete(Object)
    • update

      io.smallrye.mutiny.Uni<Void> update(Object entity)
      Update a row.
      Parameters:
      entity - a detached entity instance
      See Also:
      • StatelessSession.update(Object)
    • 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:
      • StatelessSession.update(Object)
    • 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:
      • StatelessSession.update(Object)
    • 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:
      • StatelessSession.update(Object)
    • 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:
      • StatelessSession.upsert(Object)
    • upsert

      @Incubating io.smallrye.mutiny.Uni<Void> upsert(String entityName, Object entity)
      Use a SQL merge into statement to perform an upsert.
      Parameters:
      entityName - The entityName for the entity to be merged
      entity - a detached entity instance
      Throws:
      org.hibernate.TransientObjectException - is the entity is transient
      See Also:
      • StatelessSession.upsert(String, Object)
    • 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:
      • StatelessSession.upsert(Object)
    • 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:
      • StatelessSession.upsert(Object)
    • 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:
      • StatelessSession.upsert(Object)
    • 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:
      • StatelessSession.refresh(Object)
    • 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:
      • StatelessSession.refresh(Object)
    • 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:
      • StatelessSession.refresh(Object)
    • 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:
      • StatelessSession.refresh(Object)
    • refresh

      io.smallrye.mutiny.Uni<Void> refresh(Object entity, org.hibernate.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:
      • StatelessSession.refresh(Object, LockMode)
    • 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:
      • StatelessSession.refresh(Object, LockMode)
    • 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:
      • Hibernate.initialize(Object)
    • 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
    • getResultSetMapping

      <T> ResultSetMapping<T> getResultSetMapping(Class<T> resultType, String mappingName)
      Obtain a native SQL result set mapping defined via the annotation SqlResultSetMapping.
    • getEntityGraph

      <T> jakarta.persistence.EntityGraph<T> getEntityGraph(Class<T> rootType, String graphName)
      Obtain a named EntityGraph
    • createEntityGraph

      <T> jakarta.persistence.EntityGraph<T> createEntityGraph(Class<T> rootType)
      Create a new mutable EntityGraph
    • createEntityGraph

      <T> jakarta.persistence.EntityGraph<T> createEntityGraph(Class<T> rootType, String graphName)
      Create a new mutable copy of a named EntityGraph
    • 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.