hibernate/hibernate-orm · error · IllegalArgumentException
RemovalsMode.EXCLUDE is incompatible with OrderingMode.ORDER
Error message
RemovalsMode.EXCLUDE is incompatible with OrderingMode.ORDERED
What it means
Error "RemovalsMode.EXCLUDE is incompatible with OrderingMode.ORDERED" thrown in hibernate/hibernate-orm.
Source
Thrown at hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractMultiNaturalIdLoader.java:147
}
private Object entityForNaturalId(PersistenceContext context, Object naturalId) {
final var descriptor = getEntityDescriptor();
final Object id = context.getNaturalIdResolutions().findCachedIdByNaturalId( naturalId, descriptor );
// id can be null if a non-existent natural id is requested, or a mutable natural id was changed and then deleted
return id == null ? null : context.getEntity( new EntityKey( id, descriptor.getEntityPersister() ) );
}
private <K> Object[] checkPersistenceContextForCachedResults(
K[] naturalIds,
MultiNaturalIdLoadOptions loadOptions,
SharedSessionContractImplementor session,
LockOptions lockOptions,
Consumer<E> results ) {
final var removalsMode = loadOptions.getRemovalsMode();
if ( removalsMode == FindMultipleOption.RemovalsMode.EXCLUDE
&& loadOptions.getOrderingMode() == FindMultipleOption.OrderingMode.ORDERED ) {
throw new IllegalArgumentException( "RemovalsMode.EXCLUDE is incompatible with OrderingMode.ORDERED" );
}
final List<K> unresolvedIds = arrayList( naturalIds.length );
final var context = session.getPersistenceContextInternal();
for ( K naturalId : naturalIds ) {
final Object entity = entityForNaturalId( context, naturalId );
if ( entity != null ) {
// Entity is already in the persistence context
final var entry = context.getEntry( entity );
if ( removalsMode == FindMultipleOption.RemovalsMode.INCLUDE
|| !entry.getStatus().isDeletedOrGone() ) {
// either a managed entry, or a deleted one with returnDeleted enabled
upgradeLock( entity, entry, lockOptions, session );
if ( removalsMode != FindMultipleOption.RemovalsMode.EXCLUDE ) {
final Object result = context.proxyFor( entity );
results.accept( (E) result );
}
}
}View on GitHub (pinned to fad1729dce)
Solutions
- Do not combine RemovalsMode.EXCLUDE with OrderingMode.ORDERED for natural-id multi loads; adjust the load options.
When it happens
Trigger: Thrown at hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractMultiNaturalIdLoader.java:147 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22).
Data as JSON: /api/errors/09330828d997d2aa.
Report an issue: GitHub.