{"record":{"id":"8516aacb46f73845","repo":"hibernate/hibernate-orm","slug":"multiple-filterdef-annotations-define-a-filter","errorCode":null,"errorMessage":"Multiple '@FilterDef' annotations define a filter named '${name}'","messagePattern":"Multiple '@FilterDef' annotations define a filter named '(.+?)'","errorType":"exception","errorClass":"AnnotationException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/boot/model/internal/FilterDefBinder.java","lineNumber":48,"sourceCode":"import static org.hibernate.boot.BootLogging.BOOT_LOGGER;\nimport static org.hibernate.internal.util.collections.CollectionHelper.isEmpty;\n\n/**\n * @author Gavin King\n */\npublic class FilterDefBinder {\n\n\tpublic static void bindFilterDefs(AnnotationTarget annotatedElement, MetadataBuildingContext context) {\n\t\tfinal var modelsContext = context.getBootstrapContext().getModelsContext();\n\t\tannotatedElement.forEachAnnotationUsage( FilterDef.class, modelsContext, (usage) -> {\n\t\t\tbindFilterDef( usage, context );\n\t\t} );\n\t}\n\n\tpublic static void bindFilterDef(FilterDef filterDef, MetadataBuildingContext context) {\n\t\tfinal String name = filterDef.name();\n\t\tif ( context.getMetadataCollector().getFilterDefinition( name ) != null ) {\n\t\t\tthrow new AnnotationException( \"Multiple '@FilterDef' annotations define a filter named '\" + name + \"'\" );\n\t\t}\n\n\t\tfinal Map<String, JdbcMapping> paramJdbcMappings;\n\t\tfinal Map<String, ManagedBean<? extends Supplier<?>>> parameterResolvers;\n\t\tfinal var explicitParameters = filterDef.parameters();\n\t\tif ( isEmpty( explicitParameters ) ) {\n\t\t\tparamJdbcMappings = emptyMap();\n\t\t\tparameterResolvers = emptyMap();\n\t\t}\n\t\telse {\n\t\t\tparamJdbcMappings = new HashMap<>();\n\t\t\tparameterResolvers = new HashMap<>();\n\t\t\tfor ( var explicitParameter : explicitParameters ) {\n\t\t\t\tfinal String parameterName = explicitParameter.name();\n\t\t\t\tfinal var typeClassDetails = explicitParameter.type();\n\t\t\t\tfinal var jdbcMapping = resolveFilterParamType( typeClassDetails, context );\n\t\t\t\tif ( jdbcMapping == null ) {\n\t\t\t\t\tthrow new MappingException(","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/boot/model/internal/FilterDefBinder.java#L30-L66","documentation":"Error \"Multiple '@FilterDef' annotations define a filter named '${name}'\" thrown in hibernate/hibernate-orm.","triggerScenarios":"A @Filter/@FilterJoinTable usage references an undefined filter or has no usable condition.","commonSituations":"@Filter used without a matching @FilterDef, a misspelled filter name, or neither the usage nor the FilterDef supplying a default condition.","solutions":["Rename one of the @FilterDef annotations so filter names are unique."],"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"}