{"record":{"id":"439c615165509069","repo":"hibernate/hibernate-orm","slug":"result-set-mapping-was-null","errorCode":null,"errorMessage":"Result-set mapping was null","messagePattern":"Result-set mapping was null","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java","lineNumber":830,"sourceCode":"\n\n\t// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\t// result-set mapping handling\n\n\t@Override\n\tpublic NamedResultSetMappingDescriptor getResultSetMapping(String name) {\n\t\treturn sqlResultSetMappingMap.get( name );\n\t}\n\n\t@Override\n\tpublic void visitNamedResultSetMappingDefinition(Consumer<NamedResultSetMappingDescriptor> definitionConsumer) {\n\t\tsqlResultSetMappingMap.values().forEach( definitionConsumer );\n\t}\n\n\t@Override\n\tpublic void addResultSetMapping(NamedResultSetMappingDescriptor resultSetMappingDescriptor) {\n\t\tif ( resultSetMappingDescriptor == null ) {\n\t\t\tthrow new IllegalArgumentException( \"Result-set mapping was null\" );\n\t\t}\n\t\telse {\n\t\t\tfinal String name = resultSetMappingDescriptor.getRegistrationName();\n\t\t\tif ( name == null ) {\n\t\t\t\tthrow new IllegalArgumentException( \"Result-set mapping name is null: \" + resultSetMappingDescriptor );\n\t\t\t}\n\t\t\telse if ( !defaultSqlResultSetMappingNames.contains( name ) ) {\n\t\t\t\tapplyResultSetMapping( resultSetMappingDescriptor );\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic void applyResultSetMapping(NamedResultSetMappingDescriptor resultSetMappingDescriptor) {\n\t\tfinal var old = sqlResultSetMappingMap.put(\n\t\t\t\tresultSetMappingDescriptor.getRegistrationName(),\n\t\t\t\tresultSetMappingDescriptor\n\t\t);\n\t\tif ( old != null ) {","sourceCodeStart":812,"sourceCodeEnd":848,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java#L812-L848","documentation":"During bootstrap, addResultSetMapping(...) was handed a null NamedResultSetMappingDescriptor — the object that carries an @SqlResultSetMapping's column bindings. Nothing can be registered from null, so the build fails fast with this IllegalArgumentException.","triggerScenarios":"A custom MetadataContributor or programmatic registration path passing null instead of a built descriptor — typically a builder that silently returned null for a malformed mapping entry.","commonSituations":"Libraries generating SqlResultSetMappings from configuration, refactors that changed how descriptors are constructed, and Hibernate major-version upgrades breaking contributor implementations.","solutions":["Null-check the descriptor before registration and fail with the originating configuration in the message","Fix the producer so a malformed entry raises its own descriptive error instead of returning null","Grep your codebase for addResultSetMapping callers — annotation users rarely hit this guard directly"],"exampleFix":"// before\ncollector.addResultSetMapping( buildResultSetMapping( entry ) );\n\n// after\nfinal NamedResultSetMappingDescriptor d = buildResultSetMapping( entry );\nif ( d == null ) {\n    throw new IllegalStateException( \"No result-set mapping built for \" + entry );\n}\ncollector.addResultSetMapping( d );","handlingStrategy":"validation","validationCode":"NamedResultSetMappingDescriptor d = buildResultSetMapping( entry );\nif ( d == null ) {\n    throw new IllegalStateException( \"No result-set mapping built for: \" + entry );\n}\ncollector.addResultSetMapping( d );","typeGuard":"static boolean isRegistrableMapping( NamedResultSetMappingDescriptor d ) {\n    return d != null && d.getRegistrationName() != null;\n}","tryCatchPattern":"try {\n    metadata.buildSessionFactory();\n} catch ( IllegalArgumentException e ) {\n    if ( e.getMessage() != null && e.getMessage().contains( \"Result-set mapping was null\" ) ) {\n        throw new IllegalStateException( \"Broken result-set-mapping contributor: \" + e.getMessage(), e );\n    }\n    throw e;\n}","preventionTips":["Null-check descriptors before registration","Fail in the mapping producer with the entry that could not be built","Add a bootstrap test for every metadata contributor you own"],"tags":["hibernate","orm","java","bootstrap","result-set-mapping","null-check"],"backgroundTag":"null-argument-validation","analyzedSha":"fad1729dce015f908198d57a8d80274a30f905a5","analyzedAt":"2026-08-22T04:13:57.527Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}