diff --git a/hibernate-core/src/main/java/org/hibernate/Session.java b/hibernate-core/src/main/java/org/hibernate/Session.java
index 3dd61212d8..c7a0a9d79f 100644
--- a/hibernate-core/src/main/java/org/hibernate/Session.java
+++ b/hibernate-core/src/main/java/org/hibernate/Session.java
@@ -15,8 +15,6 @@ import org.hibernate.stat.SessionStatistics;
import jakarta.persistence.CacheRetrieveMode;
import jakarta.persistence.CacheStoreMode;
-import jakarta.persistence.ConnectionConsumer;
-import jakarta.persistence.ConnectionFunction;
import jakarta.persistence.EntityGraph;
import jakarta.persistence.EntityManager;
import jakarta.persistence.FlushModeType;
@@ -194,6 +192,7 @@ public interface Session extends SharedSessionContract, EntityManager {
*
* @throws HibernateException if changes could not be synchronized with the database
*/
+ @Override
void flush();
/**
@@ -205,7 +204,7 @@ public interface Session extends SharedSessionContract, EntityManager {
*
* @param flushMode the new {@link FlushModeType}
*
- * @see #setHibernateFlushMode(FlushMode) for additional options
+ * @see #setHibernateFlushMode(FlushMode)
*/
@Override
void setFlushMode(FlushModeType flushMode);
@@ -232,6 +231,8 @@ public interface Session extends SharedSessionContract, EntityManager {
* Get the current {@linkplain FlushModeType JPA flush mode} for this session.
*
* @return the {@link FlushModeType} currently in effect
+ *
+ * @see #getHibernateFlushMode()
*/
@Override
FlushModeType getFlushMode();
@@ -267,6 +268,7 @@ public interface Session extends SharedSessionContract, EntityManager {
*
* @since 6.2
*/
+ @Override
CacheStoreMode getCacheStoreMode();
/**
@@ -276,6 +278,7 @@ public interface Session extends SharedSessionContract, EntityManager {
*
* @since 6.2
*/
+ @Override
CacheRetrieveMode getCacheRetrieveMode();
/**
@@ -287,6 +290,7 @@ public interface Session extends SharedSessionContract, EntityManager {
*
* @since 6.2
*/
+ @Override
void setCacheStoreMode(CacheStoreMode cacheStoreMode);
/**
@@ -298,6 +302,7 @@ public interface Session extends SharedSessionContract, EntityManager {
*
* @since 6.2
*/
+ @Override
void setCacheRetrieveMode(CacheRetrieveMode cacheRetrieveMode);
/**
@@ -474,9 +479,109 @@ public interface Session extends SharedSessionContract, EntityManager {
*/
void evict(Object object);
+ /**
+ * Return the persistent instance of the given entity class with the given identifier,
+ * or null if there is no such persistent instance. If the instance is already associated
+ * with the session, return that instance. This method never returns an uninitialized
+ * instance.
+ *
+ * The object returned by {@code get()} or {@code find()} is either an unproxied instance
+ * of the given entity class, or a fully-fetched proxy object.
+ *
+ * This operation requests {@link LockMode#NONE}, that is, no lock, allowing the object
+ * to be retrieved from the cache without the cost of database access. However, if it is
+ * necessary to read the state from the database, the object will be returned with the
+ * lock mode {@link LockMode#READ}.
+ *
+ * To bypass the {@linkplain Cache second-level cache}, and ensure that the state of the
+ * requested instance is read directly from the database, either:
+ *
+ *
call {@link #find(Class, Object, FindOption...)}, passing
+ * {@link CacheRetrieveMode#BYPASS} as an option,
+ *
call {@link #find(Class, Object, LockMode)} with the explicit lock mode
+ * {@link LockMode#READ}, or
+ *
{@linkplain #setCacheRetrieveMode set the cache mode} to
+ * {@link CacheRetrieveMode#BYPASS} before calling this method.
+ *
+ *
+ * @apiNote This operation is very similar to {@link #get(Class, Object)}.
+ *
+ * @param entityType the entity type
+ * @param id an identifier
+ *
+ * @return a fully-fetched persistent instance or null
+ */
+ @Override
+ T find(Class entityType, Object id);
+
+ /**
+ * Return the persistent instance of the given entity class with the given identifier,
+ * or null if there is no such persistent instance. If the instance is already associated
+ * with the session, return that instance. This method never returns an uninitialized
+ * instance. Obtain the specified lock mode if the instance exists.
+ *
+ * Convenient form of {@link #find(Class, Object, LockOptions)}.
+ *
+ * @param entityType the entity type
+ * @param id an identifier
+ * @param lockMode the lock mode
+ *
+ * @return a fully-fetched persistent instance or null
+ *
+ * @since 7.0
+ *
+ * @see #find(Class, Object, LockOptions)
+ */
+ T find(Class entityType, Object id, LockMode lockMode);
+
+ /**
+ * Return the persistent instance of the given entity class with the given identifier,
+ * or null if there is no such persistent instance. If the instance is already associated
+ * with the session, return that instance. This method never returns an uninitialized
+ * instance. Obtain the specified lock mode if the instance exists.
+ *
+ * @param entityType the entity type
+ * @param id an identifier
+ * @param lockOptions the lock mode
+ *
+ * @return a fully-fetched persistent instance or null
+ *
+ * @since 7.0
+ */
+ T find(Class entityType, Object id, LockOptions lockOptions);
+
+ /**
+ * Return the persistent instances of the given entity class with the given identifiers
+ * as a list. The position of an instance in the returned list matches the position of its
+ * identifier in the given list of identifiers, and the returned list contains a null value
+ * if there is no persistent instance matching a given identifier. If an instance is already
+ * associated with the session, that instance is returned. This method never returns an
+ * uninitialized instance.
+ *
+ * Every object returned by {@code findMultiple()} is either an unproxied instance of the
+ * given entity class, or a fully-fetched proxy object.
+ *
+ * For more advanced cases, use {@link #byMultipleIds(Class)}, which returns an instance of
+ * {@link MultiIdentifierLoadAccess}.
+ *
+ * @param entityType the entity type
+ * @param ids the list of identifiers
+ * @param options options, if any
+ *
+ * @return an ordered list of persistent instances, with null elements representing missing
+ * entities, whose positions in the list match the positions of their ids in the
+ * given list of identifiers
+ * @see #byMultipleIds(Class)
+ * @since 7.0
+ */
+ List findMultiple(Class entityType, List