{"record":{"id":"745b13ccb533fe4d","repo":"hibernate/hibernate-orm","slug":"duplicate-sql-result-set-mapping","errorCode":null,"errorMessage":"Duplicate SQL result set mapping '{}'","messagePattern":"Duplicate SQL result set mapping '(.+?)'","errorType":"exception","errorClass":"DuplicateMappingException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java","lineNumber":849,"sourceCode":"\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 ) {\n\t\t\tthrow new DuplicateMappingException(\n\t\t\t\t\tDuplicateMappingException.Type.RESULT_SET_MAPPING,\n\t\t\t\t\tresultSetMappingDescriptor.getRegistrationName()\n\t\t\t);\n\t\t}\n\t}\n\n\t@Override\n\tpublic void addDefaultResultSetMapping(NamedResultSetMappingDescriptor definition) {\n\t\tfinal String name = definition.getRegistrationName();\n\t\tif ( !defaultSqlResultSetMappingNames.contains( name ) ) {\n\t\t\tsqlResultSetMappingMap.remove( name );\n\t\t}\n\t\tapplyResultSetMapping( definition );\n\t\tdefaultSqlResultSetMappingNames.add( name );\n\t}\n\n\n\t// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~","sourceCodeStart":831,"sourceCodeEnd":867,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java#L831-L867","documentation":"DuplicateMappingException(Type.RESULT_SET_MAPPING): applyResultSetMapping detected (via the map put returning a previous value) that the same result-set-mapping name is registered twice. @SqlResultSetMapping names must be unique per persistence unit because native queries reference them by name.","triggerScenarios":"The same @SqlResultSetMapping(name=\"X\") on two entities — classic when a native-query setup is copied between entities and only the query is renamed; an orm.xml file loaded twice; annotation plus XML duplicates of the same mapping.","commonSituations":"Copy-pasted native query + mapping pairs, shared library jars, and duplicated persistence.xml <mapping-file> entries.","solutions":["Search the name from the message and rename one mapping, then update the resultSetMapping reference that points at it","Remove duplicated mapping-file entries in persistence.xml","Keep query and mapping names paired by convention (X.query / X.mapping) so copies get renamed together"],"exampleFix":"// before — mapping name copied unchanged to a second entity\n@SqlResultSetMapping(name = \"userResult\", columns = ...)\n@SqlResultSetMapping(name = \"userResult\", columns = ...)\n\n// after\n@SqlResultSetMapping(name = \"userResult\", columns = ...)\n@SqlResultSetMapping(name = \"orderResult\", columns = ...) // and update resultSetMapping=\"orderResult\"","handlingStrategy":"validation","validationCode":"static void assertNoDuplicateResultSetMappingNames( Class<?>... entityClasses ) {\n    final Map<String, Class<?>> seen = new HashMap<>();\n    for ( final Class<?> c : entityClasses ) {\n        for ( final SqlResultSetMapping m : c.getAnnotationsByType( SqlResultSetMapping.class ) ) {\n            final Class<?> prev = seen.put( m.name(), c );\n            if ( prev != null ) {\n                throw new IllegalStateException( \"Duplicate @SqlResultSetMapping '\" + m.name() + \"' on \" + prev + \" and \" + c );\n            }\n        }\n    }\n}","typeGuard":null,"tryCatchPattern":"try {\n    metadata.buildSessionFactory();\n} catch ( DuplicateMappingException e ) {\n    if ( e.getType() == DuplicateMappingException.Type.RESULT_SET_MAPPING ) {\n        throw new IllegalStateException( \"Duplicate SQL result set mapping '\" + e.getName() + \"' — rename one mapping and its referencing query\", e );\n    }\n    throw e;\n}","preventionTips":["Pair mapping and query names by convention so copies are renamed together","Declare result-set mappings next to the native query that uses them","Check for duplicated mapping files in persistence.xml"],"tags":["hibernate","orm","jpa","java","bootstrap","result-set-mapping","duplicate-mapping"],"backgroundTag":"duplicate-mapping-name","analyzedSha":"fad1729dce015f908198d57a8d80274a30f905a5","analyzedAt":"2026-08-22T04:13:57.527Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}