hibernate/hibernate-orm · error · QueryException

Can't emulate exists false on error for json_table() on SQL

Error message

Can't emulate exists false on error for json_table() on SQL Server

What it means

Error "Can't emulate exists false on error for json_table() on SQL Server" thrown in hibernate/hibernate-orm.

Source

Thrown at hibernate-core/src/main/java/org/hibernate/dialect/function/json/SQLServerJsonTableFunction.java:158

				if ( queryColumnDefinition.wrapMode() == JsonQueryWrapMode.WITH_WRAPPER ) {
					sqlAppender.appendSql( "+']'" );
				}
				if ( queryColumnDefinition.emptyBehavior() == JsonQueryEmptyBehavior.EMPTY_ARRAY ) {
					sqlAppender.appendSql( ",'[]')" );
				}
				else if ( queryColumnDefinition.emptyBehavior() == JsonQueryEmptyBehavior.EMPTY_OBJECT ) {
					sqlAppender.appendSql( ",'{}')" );
				}
				sqlAppender.appendSql( ' ' );
				sqlAppender.appendSql( queryColumnDefinition.name() );
			}
			else if ( columnDefinition instanceof JsonTableOrdinalityColumnDefinition ordinalityColumnDefinition ) {
				sqlAppender.appendSql( "row_number() over (order by (select null)) " );
				sqlAppender.appendSql( ordinalityColumnDefinition.name() );
			}
			else if ( columnDefinition instanceof JsonTableExistsColumnDefinition existsColumnDefinition ) {
				if ( existsColumnDefinition.errorBehavior() == JsonExistsErrorBehavior.FALSE ) {
					throw new QueryException( "Can't emulate exists false on error for json_table() on SQL Server" );
				}
				final String jsonPath = existsColumnDefinition.jsonPath() == null
						? "$." + existsColumnDefinition.name()
						: existsColumnDefinition.jsonPath();
				final List<JsonPathHelper.JsonPathElement> pathElements = JsonPathHelper.parseJsonPathElements( jsonPath );
				final JsonPathHelper.JsonPathElement lastPathElement = pathElements.get( pathElements.size() - 1 );
				final String prefix = JsonPathHelper.toJsonPath( pathElements, 0, pathElements.size() - 1 );
				final String terminalKey;
				if ( lastPathElement instanceof JsonPathHelper.JsonIndexAccess indexAccess ) {
					terminalKey = String.valueOf( indexAccess.index() );
				}
				else if (lastPathElement instanceof JsonPathHelper.JsonAttribute attribute) {
					terminalKey = attribute.attribute();
				}
				else {
					throw new AssertionFailure( "Unrecognized json path element: " + lastPathElement );
				}

View on GitHub (pinned to fad1729dce)

Solutions

  1. Remove the FALSE ON ERROR clause from the json_table exists column.

When it happens

Trigger: Triggered when the application calls a Hibernate dialect feature that the configured database dialect cannot provide: Can't emulate exists false on error for json_table() on SQL Server.

Common situations: Common when running against a database whose dialect lacks this capability, when a mapping or HQL/Criteria query requests unsupported functionality, or when the wrong dialect is configured for the database in use. Error: Can't emulate exists false on error for json_table() on SQL Server.


AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22). Data as JSON: /api/errors/51d6ec20b07dfbc5. Report an issue: GitHub.