diff --git a/hibernate-core/src/main/java/org/hibernate/SessionFactory.java b/hibernate-core/src/main/java/org/hibernate/SessionFactory.java index 27ad1fe3266d..95f422e4e7d3 100644 --- a/hibernate-core/src/main/java/org/hibernate/SessionFactory.java +++ b/hibernate-core/src/main/java/org/hibernate/SessionFactory.java @@ -7,11 +7,14 @@ import java.io.Serializable; import java.sql.Connection; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.function.Consumer; import java.util.function.Function; import javax.naming.Referenceable; +import jakarta.persistence.EntityManager; +import jakarta.persistence.SynchronizationType; import org.hibernate.boot.spi.SessionFactoryOptions; import org.hibernate.engine.spi.FilterDefinition; import org.hibernate.graph.RootGraph; @@ -157,6 +160,8 @@ public interface SessionFactory extends EntityManagerFactory, Referenceable, Ser * * @return The created session. * + * @apiNote This operation is very similar to {@link #createEntityManager()} + * * @throws HibernateException Indicates a problem opening the session; pretty rare here. */ Session openSession() throws HibernateException; @@ -294,6 +299,42 @@ default R fromStatelessTransaction(Function action) { return fromStatelessSession( session -> manageTransaction( session, session.beginTransaction(), action ) ); } + /** + * Create a new {@link Session}. + */ + @Override + Session createEntityManager(); + + /** + * Create a new {@link Session}, with the given + * {@linkplain EntityManager#getProperties properties}. + */ + @Override + Session createEntityManager(Map map); + + /** + * Create a new {@link Session}, with the given + * {@linkplain SynchronizationType synchronization type}. + * + * @throws IllegalStateException if the persistence unit has + * {@linkplain jakarta.persistence.PersistenceUnitTransactionType#RESOURCE_LOCAL + * resource-local} transaction management + */ + @Override + Session createEntityManager(SynchronizationType synchronizationType); + + /** + * Create a new {@link Session}, with the given + * {@linkplain SynchronizationType synchronization type} and + * {@linkplain EntityManager#getProperties properties}. + * + * @throws IllegalStateException if the persistence unit has + * {@linkplain jakarta.persistence.PersistenceUnitTransactionType#RESOURCE_LOCAL + * resource-local} transaction management + */ + @Override + Session createEntityManager(SynchronizationType synchronizationType, Map map); + /** * Retrieve the {@linkplain Statistics statistics} for this factory. * diff --git a/hibernate-core/src/main/java/org/hibernate/engine/spi/SessionFactoryDelegatingImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/spi/SessionFactoryDelegatingImpl.java index fa62852dfbd9..7148e7201ca5 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/spi/SessionFactoryDelegatingImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/spi/SessionFactoryDelegatingImpl.java @@ -348,22 +348,22 @@ public Reference getReference() throws NamingException { } @Override - public EntityManager createEntityManager() { + public Session createEntityManager() { return delegate.createEntityManager(); } @Override - public EntityManager createEntityManager(Map map) { + public Session createEntityManager(Map map) { return delegate.createEntityManager( map ); } @Override - public EntityManager createEntityManager(SynchronizationType synchronizationType) { + public Session createEntityManager(SynchronizationType synchronizationType) { return delegate.createEntityManager( synchronizationType ); } @Override - public EntityManager createEntityManager(SynchronizationType synchronizationType, Map map) { + public Session createEntityManager(SynchronizationType synchronizationType, Map map) { return delegate.createEntityManager( synchronizationType, map ); }