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