hibernate/hibernate-orm · error · HibernateException
Query by natural id returned more that one row: %s
Error message
Query by natural id returned more that one row: %s
What it means
Error "Query by natural id returned more that one row: %s" thrown in hibernate/hibernate-orm.
Source
Thrown at hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractNaturalIdLoader.java:305
bindings,
new NaturalIdLoaderWithOptionsExecutionContext( session, queryOptions ),
RowTransformerSingularReturnImpl.instance(),
null,
ListResultsConsumer.UniqueSemantic.FILTER,
1
);
if ( statisticsEnabled ) {
statistics.naturalIdQueryExecuted(
entityDescriptor().getEntityPersister().getRootEntityName(),
System.nanoTime() - startTime
);
}
return switch ( results.size() ) {
case 0 -> null;
case 1 -> results.get( 0 );
default -> throw new HibernateException(
String.format(
"Query by natural id returned more that one row: %s",
entityDescriptor.getEntityName()
)
);
};
}
private static JdbcSelect createJdbcOperationQuerySelect(
SelectStatement sqlSelect,
SessionFactoryImplementor factory,
JdbcParameterBindings bindings,
QueryOptions queryOptions) {
return factory.getJdbcServices().getJdbcEnvironment()
.getSqlAstTranslatorFactory()
.buildSelectTranslator( factory, sqlSelect )
.translate( bindings, queryOptions );
}View on GitHub (pinned to fad1729dce)
Solutions
- Add a unique constraint on the natural id column(s) or fix duplicate data; natural ids must be unique.
When it happens
Trigger: Thrown at hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractNaturalIdLoader.java:305 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/df4d2bc0f467c876.
Report an issue: GitHub.