HHH-17673 - allow the use of StatementInspector with stateless sessions
Signed-off-by: Jan Schatteman <jschatte@redhat.com>
This commit is contained in:
parent
34a66fcbfa
commit
fc3f975f0b
|
@ -8,6 +8,8 @@ package org.hibernate;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
|
|
||||||
|
import org.hibernate.resource.jdbc.spi.StatementInspector;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows creation of a new {@link StatelessSession} with specific options.
|
* Allows creation of a new {@link StatelessSession} with specific options.
|
||||||
*
|
*
|
||||||
|
@ -50,4 +52,13 @@ public interface StatelessSessionBuilder {
|
||||||
* @since 6.4
|
* @since 6.4
|
||||||
*/
|
*/
|
||||||
StatelessSessionBuilder tenantIdentifier(Object tenantIdentifier);
|
StatelessSessionBuilder tenantIdentifier(Object tenantIdentifier);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applies the given {@link StatementInspector} to the stateless session.
|
||||||
|
*
|
||||||
|
* @param statementInspector The StatementInspector to use.
|
||||||
|
*
|
||||||
|
* @return {@code this}, for method chaining
|
||||||
|
*/
|
||||||
|
StatelessSessionBuilder statementInspector(StatementInspector statementInspector);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1469,11 +1469,13 @@ public class SessionFactoryImpl extends QueryParameterBindingTypeResolverImpl im
|
||||||
|
|
||||||
public static class StatelessSessionBuilderImpl implements StatelessSessionBuilder, SessionCreationOptions {
|
public static class StatelessSessionBuilderImpl implements StatelessSessionBuilder, SessionCreationOptions {
|
||||||
private final SessionFactoryImpl sessionFactory;
|
private final SessionFactoryImpl sessionFactory;
|
||||||
|
private StatementInspector statementInspector;
|
||||||
private Connection connection;
|
private Connection connection;
|
||||||
private Object tenantIdentifier;
|
private Object tenantIdentifier;
|
||||||
|
|
||||||
public StatelessSessionBuilderImpl(SessionFactoryImpl sessionFactory) {
|
public StatelessSessionBuilderImpl(SessionFactoryImpl sessionFactory) {
|
||||||
this.sessionFactory = sessionFactory;
|
this.sessionFactory = sessionFactory;
|
||||||
|
this.statementInspector = sessionFactory.getSessionFactoryOptions().getStatementInspector();
|
||||||
|
|
||||||
CurrentTenantIdentifierResolver<Object> tenantIdentifierResolver = sessionFactory.getCurrentTenantIdentifierResolver();
|
CurrentTenantIdentifierResolver<Object> tenantIdentifierResolver = sessionFactory.getCurrentTenantIdentifierResolver();
|
||||||
if ( tenantIdentifierResolver != null ) {
|
if ( tenantIdentifierResolver != null ) {
|
||||||
|
@ -1504,6 +1506,12 @@ public class SessionFactoryImpl extends QueryParameterBindingTypeResolverImpl im
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StatelessSessionBuilder statementInspector(StatementInspector statementInspector) {
|
||||||
|
this.statementInspector = statementInspector;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldAutoJoinTransactions() {
|
public boolean shouldAutoJoinTransactions() {
|
||||||
return true;
|
return true;
|
||||||
|
@ -1547,7 +1555,7 @@ public class SessionFactoryImpl extends QueryParameterBindingTypeResolverImpl im
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatementInspector getStatementInspector() {
|
public StatementInspector getStatementInspector() {
|
||||||
return null;
|
return statementInspector;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -22,8 +22,10 @@ import jakarta.persistence.Id;
|
||||||
import jakarta.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import org.hibernate.StatelessSession;
|
import org.hibernate.StatelessSession;
|
||||||
|
import org.hibernate.StatelessSessionBuilder;
|
||||||
import org.hibernate.dialect.H2Dialect;
|
import org.hibernate.dialect.H2Dialect;
|
||||||
|
|
||||||
|
import org.hibernate.testing.jdbc.SQLStatementInspector;
|
||||||
import org.hibernate.testing.orm.junit.DomainModel;
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
import org.hibernate.testing.orm.junit.RequiresDialect;
|
import org.hibernate.testing.orm.junit.RequiresDialect;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactory;
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
|
@ -42,7 +44,6 @@ import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
@DomainModel(
|
@DomainModel(
|
||||||
annotatedClasses = StatelessDoWorkTest.TestEntity.class
|
annotatedClasses = StatelessDoWorkTest.TestEntity.class
|
||||||
)
|
)
|
||||||
@SessionFactory
|
|
||||||
public class StatelessDoWorkTest {
|
public class StatelessDoWorkTest {
|
||||||
public static final String EXPECTED_ENTITY_NAME = "test";
|
public static final String EXPECTED_ENTITY_NAME = "test";
|
||||||
public static final Integer PERSISTED_TEST_ENTITY_ID = 1;
|
public static final Integer PERSISTED_TEST_ENTITY_ID = 1;
|
||||||
|
@ -68,6 +69,7 @@ public class StatelessDoWorkTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@SessionFactory
|
||||||
public void testDoReturningWork(SessionFactoryScope scope) {
|
public void testDoReturningWork(SessionFactoryScope scope) {
|
||||||
String retrievedEntityName;
|
String retrievedEntityName;
|
||||||
try (StatelessSession statelessSession = scope.getSessionFactory().openStatelessSession()) {
|
try (StatelessSession statelessSession = scope.getSessionFactory().openStatelessSession()) {
|
||||||
|
@ -91,6 +93,7 @@ public class StatelessDoWorkTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@SessionFactory
|
||||||
public void testDoWork(SessionFactoryScope scope) {
|
public void testDoWork(SessionFactoryScope scope) {
|
||||||
try (StatelessSession statelessSession = scope.getSessionFactory().openStatelessSession()) {
|
try (StatelessSession statelessSession = scope.getSessionFactory().openStatelessSession()) {
|
||||||
statelessSession.doWork(
|
statelessSession.doWork(
|
||||||
|
@ -106,6 +109,31 @@ public class StatelessDoWorkTest {
|
||||||
assertThatAllTestEntitiesHaveBeenDeleted( scope );
|
assertThatAllTestEntitiesHaveBeenDeleted( scope );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SessionFactory(useCollectingStatementInspector = true)
|
||||||
|
public void testStatelessSessionWithStatementInspector(SessionFactoryScope scope) {
|
||||||
|
SQLStatementInspector statementInspector = scope.getCollectingStatementInspector();
|
||||||
|
statementInspector.clear();
|
||||||
|
scope.inStatelessSession(
|
||||||
|
session -> {
|
||||||
|
session.createQuery( "from TestEntity", TestEntity.class ).list();
|
||||||
|
statementInspector.assertExecutedCount( 1 );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SessionFactory
|
||||||
|
public void testStatelessSessionWithStatementInspector2(SessionFactoryScope scope) {
|
||||||
|
SQLStatementInspector statementInspector = new SQLStatementInspector();
|
||||||
|
final StatelessSessionBuilder statelessSessionBuilder = scope.getSessionFactory().withStatelessOptions().statementInspector( statementInspector );
|
||||||
|
StatelessSession session = statelessSessionBuilder.openStatelessSession();
|
||||||
|
session.createQuery( "from TestEntity", TestEntity.class ).list();
|
||||||
|
statementInspector.assertExecutedCount( 1 );
|
||||||
|
statementInspector.clear();
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
|
||||||
private void assertThatAllTestEntitiesHaveBeenDeleted(SessionFactoryScope scope) {
|
private void assertThatAllTestEntitiesHaveBeenDeleted(SessionFactoryScope scope) {
|
||||||
scope.inTransaction( session -> {
|
scope.inTransaction( session -> {
|
||||||
List results = session.createQuery( "from TestEntity" ).list();
|
List results = session.createQuery( "from TestEntity" ).list();
|
||||||
|
|
Loading…
Reference in New Issue