hibernate/hibernate-orm · error · MappingException
Error creating SQL 'create' commands for table '
Error message
Error creating SQL 'create' commands for table '
What it means
StandardTableExporter wraps every exception thrown while composing the CREATE TABLE/VIEW statement for one table into a MappingException prefixed with this message, appending the table name and the original exception's message. It is an umbrella: the actionable information is the bracketed suffix and the nested cause, typically a column type/definition problem or a dialect capability mismatch discovered while rendering the table.
Source
Thrown at hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardTableExporter.java:72
Table table,
Metadata metadata,
SqlStringGenerationContext context) {
final var tableName = getTableName( table );
try {
final String formattedTableName = context.format( tableName );
final String ddl =
table.isView()
? appendCreateView( table, formattedTableName )
: appendCreateTable( table, formattedTableName, metadata, context );
final List<String> sqlStrings = new ArrayList<>();
sqlStrings.add( ddl );
applyComments( table, formattedTableName, sqlStrings );
applyInitCommands( table, sqlStrings, context );
return sqlStrings.toArray( EMPTY_STRINGS );
}
catch (Exception e) {
throw new MappingException( "Error creating SQL 'create' commands for table '"
+ table.getName() + "' [" + e.getMessage() + "]" , e );
}
}
private static void appendOptions(Table table, StringBuilder createTable) {
final String options = table.getOptions();
if ( isNotBlank( options ) ) {
createTable.append( " " ).append( options );
}
}
private String appendCreateTable(Table table, String tableName, Metadata metadata, SqlStringGenerationContext context) {
final var createTable = new StringBuilder();
final var extra = new StringBuilder();
createTable.append( tableCreateString( table ) )
.append( ' ' )
.append( tableName )View on GitHub (pinned to fad1729dce)
Solutions
- Read the bracketed suffix and the caused-by stack trace; fix that root problem (usually a specific column mapping), not the wrapper.
- Make the offending mapping dialect-portable: drop hard-coded columnDefinition, use @JdbcTypeCode(SqlTypes.LONGVARCHAR) (or similar) for very long strings instead of huge lengths.
- Verify the dialect matches the actual database version; prefer letting Hibernate detect it rather than pinning an old dialect.
- Isolate the table by exporting with TargetType.STDOUT to inspect the partially rendered SQL and confirm the fix.
Example fix
// before @Column(length = 10_000_000) // exceeds the dialect's varchar limit -> type render throws, wrapped here private String body; // after @JdbcTypeCode(SqlTypes.LONGVARCHAR) // dialect renders its own large-text type private String body;
Defensive patterns
Strategy: try-catch
Validate before calling
// cheap pre-flight: export all mappings to STDOUT only; render errors surface here without touching a DB new SchemaExport(metadata).createOnly(EnumSet.of(TargetType.STDOUT));
Try / catch
try {
new SchemaExport(metadata).createOnly();
} catch (MappingException e) {
if (e.getMessage() != null && e.getMessage().startsWith("Error creating SQL 'create' commands for table")) {
Throwable root = e; while (root.getCause() != null) root = root.getCause();
// fix the mapping named by the table in the message based on `root`
} else { throw e; }
} Prevention
- Keep column mappings dialect-portable; avoid hard-coded columnDefinition.
- Run stdout-only schema export in CI against the production-like database version.
- Re-run mapping smoke tests after dialect or Hibernate upgrades.
When it happens
Trigger: Any exception while rendering create-DDL for a table: a column length/type the dialect cannot render (e.g., varchar length exceeding the dialect limit), invalid @Column(columnDefinition=...) interacting with dialect type resolution, unsupported identity/id-generation settings for the dialect, dialect option lookups failing during appendCreateTable, or a programmatically built Table with inconsistent column/type metadata. Surfaces during hbm2ddl create, SchemaExport, or create-drop startup.
Common situations: Porting an app to another database (H2/SQLServer/Oracle) with mappings tuned for the original DB; Hibernate or dialect upgrades that change type rendering; @Column(length = ...) values above the new dialect's limit; entities with exotic @JdbcType/@JdbcTypeCode combinations; views with options the dialect rejects.
Related errors
- unknown type: {sqlTypeCode}
- Unable to determine SQL type name for column '%s' of table '
- SQL strings added more than once for:
- SQL strings added more than once for:
- SQL strings added more than once for:
AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22).
Data as JSON: /api/errors/ecde02afa2b5445f.
Report an issue: GitHub.