Reputation: 11
I'm upgrading the Hibernate version from 5.x to 6.4 in my application.
When I upgraded to the latest Hibernate version (6.4), The DDL validation step was broken. During upgrading job, I noticed that Hibernate 6.2 changed the SQL data type mapping for ENUM on MySQL.
To work around this issue, I created a custom Dialect and overrode the contributeTypes method as follows:
@Override
public void contributeTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry) {
super.contributeTypes(typeContributions, serviceRegistry);
DdlTypeRegistry ddlTypeRegistry = typeContributions.getTypeConfiguration().getDdlTypeRegistry();
DdlType varcharType = ddlTypeRegistry.getDescriptor(SqlTypes.VARCHAR);
ddlTypeRegistry.addDescriptor(SqlTypes.ENUM, varcharType);
JdbcTypeRegistry jdbcTypeRegistry = typeContributions.getTypeConfiguration().getJdbcTypeRegistry();
jdbcTypeRegistry.addDescriptor(SqlTypes.ENUM, VarcharJdbcType.INSTANCE);
}
This approach seems to work correctly. However, I'm unsure whether creating a custom Dialect class is the recommended way to handle this type of mapping issue, or if there is a better practice I should follow.
Is creating a custom Dialect an excessive solution for this problem? Are there any potential issues or gotchas I should be aware of with this approach, such as compatibility concerns with future Hibernate/JPA versions?
I'd appreciate any insights or recommendations from those with more experience in this area.
Upvotes: 0
Views: 93