{"record":{"id":"09330828d997d2aa","repo":"hibernate/hibernate-orm","slug":"removalsmode-exclude-is-incompatible-with-ordering-093308","errorCode":null,"errorMessage":"RemovalsMode.EXCLUDE is incompatible with OrderingMode.ORDERED","messagePattern":"RemovalsMode\\.EXCLUDE is incompatible with OrderingMode\\.ORDERED","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractMultiNaturalIdLoader.java","lineNumber":147,"sourceCode":"\t}\n\n\tprivate Object entityForNaturalId(PersistenceContext context, Object naturalId) {\n\t\tfinal var descriptor = getEntityDescriptor();\n\t\tfinal Object id = context.getNaturalIdResolutions().findCachedIdByNaturalId( naturalId, descriptor );\n\t\t// id can be null if a non-existent natural id is requested, or a mutable natural id was changed and then deleted\n\t\treturn id == null ? null : context.getEntity( new EntityKey( id, descriptor.getEntityPersister() ) );\n\t}\n\n\tprivate <K> Object[] checkPersistenceContextForCachedResults(\n\t\t\tK[] naturalIds,\n\t\t\tMultiNaturalIdLoadOptions loadOptions,\n\t\t\tSharedSessionContractImplementor session,\n\t\t\tLockOptions lockOptions,\n\t\t\tConsumer<E> results ) {\n\t\tfinal var removalsMode = loadOptions.getRemovalsMode();\n\t\tif ( removalsMode == FindMultipleOption.RemovalsMode.EXCLUDE\n\t\t\t\t&& loadOptions.getOrderingMode() == FindMultipleOption.OrderingMode.ORDERED ) {\n\t\t\tthrow new IllegalArgumentException( \"RemovalsMode.EXCLUDE is incompatible with OrderingMode.ORDERED\" );\n\t\t}\n\t\tfinal List<K> unresolvedIds = arrayList( naturalIds.length );\n\t\tfinal var context = session.getPersistenceContextInternal();\n\t\tfor ( K naturalId : naturalIds ) {\n\t\t\tfinal Object entity = entityForNaturalId( context, naturalId );\n\t\t\tif ( entity != null ) {\n\t\t\t\t// Entity is already in the persistence context\n\t\t\t\tfinal var entry = context.getEntry( entity );\n\t\t\t\tif ( removalsMode == FindMultipleOption.RemovalsMode.INCLUDE\n\t\t\t\t\t\t|| !entry.getStatus().isDeletedOrGone() ) {\n\t\t\t\t\t// either a managed entry, or a deleted one with returnDeleted enabled\n\t\t\t\t\tupgradeLock( entity, entry, lockOptions, session );\n\t\t\t\t\tif ( removalsMode != FindMultipleOption.RemovalsMode.EXCLUDE ) {\n\t\t\t\t\t\tfinal Object result = context.proxyFor( entity );\n\t\t\t\t\t\tresults.accept( (E) result );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}","sourceCodeStart":129,"sourceCodeEnd":165,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractMultiNaturalIdLoader.java#L129-L165","documentation":"Error \"RemovalsMode.EXCLUDE is incompatible with OrderingMode.ORDERED\" thrown in hibernate/hibernate-orm.","triggerScenarios":"Thrown at hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractMultiNaturalIdLoader.java:147 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Do not combine RemovalsMode.EXCLUDE with OrderingMode.ORDERED for natural-id multi loads; adjust the load options."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fad1729dce015f908198d57a8d80274a30f905a5","analyzedAt":"2026-08-22T04:13:57.527Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}