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

  1. 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.