Skip to content

Commit c3e8f94

Browse files
committed
expose two additional useful settings via SessionBuilder
the machinery was already there
1 parent 3cb68f5 commit c3e8f94

11 files changed

+103
-20
lines changed

hibernate-core/src/main/java/org/hibernate/SessionBuilder.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,4 +217,28 @@ public interface SessionBuilder extends CommonBuilder {
217217
* @since 7.0
218218
*/
219219
SessionBuilder identifierRollback(boolean identifierRollback);
220+
221+
/**
222+
* Specify the default batch fetch size for the session.
223+
*
224+
* @return {@code this}, for method chaining
225+
*
226+
* @see org.hibernate.cfg.FetchSettings#DEFAULT_BATCH_FETCH_SIZE
227+
* @see Session#setFetchBatchSize(int)
228+
*
229+
* @since 7.2
230+
*/
231+
SessionBuilder defaultBatchFetchSize(int defaultBatchFetchSize);
232+
233+
/**
234+
* Specify whether subselect fetching is enabled for the session.
235+
*
236+
* @return {@code this}, for method chaining
237+
*
238+
* @see org.hibernate.cfg.FetchSettings#USE_SUBSELECT_FETCH
239+
* @see Session#setSubselectFetchingEnabled(boolean)
240+
*
241+
* @since 7.2
242+
*/
243+
SessionBuilder subselectFetchEnabled(boolean subselectFetchEnabled);
220244
}

hibernate-core/src/main/java/org/hibernate/SharedSessionBuilder.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,4 +158,10 @@ public interface SharedSessionBuilder extends SessionBuilder, CommonSharedBuilde
158158

159159
@Override
160160
SharedSessionBuilder identifierRollback(boolean identifierRollback);
161+
162+
@Override
163+
SharedSessionBuilder defaultBatchFetchSize(int defaultBatchFetchSize);
164+
165+
@Override
166+
SharedSessionBuilder subselectFetchEnabled(boolean subselectFetchEnabled);
161167
}

hibernate-core/src/main/java/org/hibernate/engine/creation/internal/SessionBuilderImpl.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,8 @@ public abstract class SessionBuilderImpl
3939
private boolean autoClear;
4040
private boolean identifierRollback;
4141
private FlushMode flushMode;
42-
43-
private final int defaultBatchFetchSize;
44-
private final boolean subselectFetchEnabled;
42+
private int defaultBatchFetchSize;
43+
private boolean subselectFetchEnabled;
4544

4645
// Lazy: defaults can be built by invoking the builder in fastSessionServices.defaultSessionEventListeners
4746
// (Need a fresh build for each Session as the listener instances can't be reused across sessions)
@@ -232,4 +231,16 @@ public SessionBuilderImplementor clearEventListeners() {
232231
}
233232
return this;
234233
}
234+
235+
@Override
236+
public SessionBuilderImplementor defaultBatchFetchSize(int defaultBatchFetchSize) {
237+
this.defaultBatchFetchSize = defaultBatchFetchSize;
238+
return this;
239+
}
240+
241+
@Override
242+
public SessionBuilderImplementor subselectFetchEnabled(boolean subselectFetchEnabled) {
243+
this.subselectFetchEnabled = subselectFetchEnabled;
244+
return this;
245+
}
235246
}

hibernate-core/src/main/java/org/hibernate/engine/creation/internal/SharedSessionBuilderImpl.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,12 @@ public abstract class SharedSessionBuilderImpl
4646
private boolean autoClear;
4747
private boolean identifierRollback;
4848
private FlushMode flushMode;
49+
private int defaultBatchFetchSize;
50+
private boolean subselectFetchEnabled;
4951

5052
private boolean tenantIdChanged;
5153
private boolean readOnlyChanged;
5254

53-
private final int defaultBatchFetchSize;
54-
private final boolean subselectFetchEnabled;
5555

5656
// Lazy: defaults can be built by invoking the builder in fastSessionServices.defaultSessionEventListeners
5757
// (Need a fresh build for each Session as the listener instances can't be reused across sessions)
@@ -247,6 +247,17 @@ public SharedSessionBuilderImplementor eventListeners(SessionEventListener... li
247247
return this;
248248
}
249249

250+
@Override
251+
public SharedSessionBuilderImplementor defaultBatchFetchSize(int defaultBatchFetchSize) {
252+
this.defaultBatchFetchSize = defaultBatchFetchSize;
253+
return this;
254+
}
255+
256+
@Override
257+
public SharedSessionBuilderImplementor subselectFetchEnabled(boolean subselectFetchEnabled) {
258+
this.subselectFetchEnabled = subselectFetchEnabled;
259+
return this;
260+
}
250261

251262
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
252263
// SharedSessionCreationOptions

hibernate-core/src/main/java/org/hibernate/engine/creation/spi/SessionBuilderImplementor.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,10 @@ public interface SessionBuilderImplementor extends SessionBuilder {
9393

9494
@Override
9595
SessionBuilderImplementor noStatementInspector();
96+
97+
@Override
98+
SessionBuilderImplementor defaultBatchFetchSize(int defaultBatchFetchSize);
99+
100+
@Override
101+
SessionBuilderImplementor subselectFetchEnabled(boolean subselectFetchEnabled);
96102
}

hibernate-core/src/main/java/org/hibernate/engine/creation/spi/SharedSessionBuilderImplementor.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,10 @@ public interface SharedSessionBuilderImplementor extends SharedSessionBuilder, S
111111

112112
@Override
113113
SharedSessionBuilderImplementor noStatementInspector();
114+
115+
@Override
116+
SharedSessionBuilderImplementor defaultBatchFetchSize(int defaultBatchFetchSize);
117+
118+
@Override
119+
SharedSessionBuilderImplementor subselectFetchEnabled(boolean subselectFetchEnabled);
114120
}

hibernate-core/src/main/java/org/hibernate/engine/spi/AbstractDelegatingSessionBuilder.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,4 +172,16 @@ public SessionBuilderImplementor identifierRollback(boolean identifierRollback)
172172
delegate.identifierRollback( identifierRollback );
173173
return this;
174174
}
175+
176+
@Override
177+
public SessionBuilderImplementor defaultBatchFetchSize(int defaultBatchFetchSize) {
178+
delegate.defaultBatchFetchSize( defaultBatchFetchSize );
179+
return this;
180+
}
181+
182+
@Override
183+
public SessionBuilderImplementor subselectFetchEnabled(boolean subselectFetchEnabled) {
184+
delegate.subselectFetchEnabled( subselectFetchEnabled );
185+
return this;
186+
}
175187
}

hibernate-core/src/main/java/org/hibernate/engine/spi/AbstractDelegatingSharedSessionBuilder.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,4 +219,16 @@ public SharedSessionBuilder identifierRollback(boolean identifierRollback) {
219219
delegate.identifierRollback( identifierRollback );
220220
return this;
221221
}
222+
223+
@Override
224+
public SharedSessionBuilder defaultBatchFetchSize(int defaultBatchFetchSize) {
225+
delegate.defaultBatchFetchSize( defaultBatchFetchSize );
226+
return this;
227+
}
228+
229+
@Override
230+
public SharedSessionBuilder subselectFetchEnabled(boolean subselectFetchEnabled) {
231+
delegate.subselectFetchEnabled( subselectFetchEnabled );
232+
return this;
233+
}
222234
}

hibernate-core/src/main/java/org/hibernate/engine/spi/LoadQueryInfluencers.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public class LoadQueryInfluencers implements Serializable {
5656

5757
private boolean subselectFetchEnabled;
5858

59-
private int batchSize = -1;
59+
private int batchSize;
6060

6161
private final EffectiveEntityGraph effectiveEntityGraph;
6262

hibernate-core/src/main/java/org/hibernate/internal/SessionFactoryImpl.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public class SessionFactoryImpl implements SessionFactoryImplementor {
163163

164164
private transient volatile Status status = Status.OPEN;
165165

166-
private final transient SessionFactoryObserverChain observer = new SessionFactoryObserverChain();
166+
private final transient SessionFactoryObserverChain observerChain = new SessionFactoryObserverChain();
167167

168168
private final transient SessionFactoryOptions sessionFactoryOptions;
169169
private final transient Map<String,Object> settings;
@@ -237,7 +237,7 @@ public SessionFactoryImpl(
237237
jpaPersistenceUnitUtil = new PersistenceUnitUtilImpl( this );
238238

239239
for ( var sessionFactoryObserver : options.getSessionFactoryObservers() ) {
240-
observer.addObserver( sessionFactoryObserver );
240+
observerChain.addObserver( sessionFactoryObserver );
241241
}
242242

243243
filters = new HashMap<>( bootMetamodel.getFilterDefinitions() );
@@ -258,7 +258,7 @@ public SessionFactoryImpl(
258258
jdbcValuesMappingProducerProvider = serviceRegistry.requireService( JdbcValuesMappingProducerProvider.class );
259259

260260
final var integratorObserver = new IntegratorObserver();
261-
observer.addObserver( integratorObserver );
261+
observerChain.addObserver( integratorObserver );
262262
try {
263263
integrate( bootMetamodel, bootstrapContext, integratorObserver );
264264

@@ -321,7 +321,7 @@ public SessionFactoryImpl(
321321
// we're in an incompletely-initialized state
322322
typeConfiguration.scope( this );
323323

324-
observer.sessionFactoryCreated( this );
324+
observerChain.sessionFactoryCreated( this );
325325
}
326326
catch ( Exception e ) {
327327
disintegrate( e, integratorObserver );
@@ -573,7 +573,7 @@ public StatelessSession openStatelessSession(Connection connection) {
573573

574574
@Override
575575
public void addObserver(SessionFactoryObserver observer) {
576-
this.observer.addObserver( observer );
576+
observerChain.addObserver( observer );
577577
}
578578

579579
@Override
@@ -798,7 +798,7 @@ public void close() {
798798

799799
try {
800800
SESSION_FACTORY_LOGGER.closingFactory( uuid );
801-
observer.sessionFactoryClosing( this );
801+
observerChain.sessionFactoryClosing( this );
802802

803803
// NOTE: the null checks below handle cases where close is called
804804
// from a failed attempt to create the SessionFactory
@@ -835,7 +835,7 @@ public void close() {
835835
status = Status.CLOSED;
836836
}
837837

838-
observer.sessionFactoryClosed( this );
838+
observerChain.sessionFactoryClosed( this );
839839
serviceRegistry.destroy();
840840
}
841841

0 commit comments

Comments
 (0)