For MySQL/MariaDB and PostgreSQL, @Enumerated(EnumType.STRING) attributes are currently translated into enum(...) types when generated the database schema. MySQL, MariaDB, and PostgreSQL all specify that sorting enum columns will use the order in which the enum values were specified in the enum(...) type. If the enum(...) type was simply generated using the Java enum’s natural order, this sorting behaviour would match both @Enumerated(EnumType.ORDINAL) and the Java enum sorting behaviour. However, Dialect#getEnumTypeDeclaration sorts the enum values alphabatically, removing the intended order. I.e. enum values should not be sorted alphabetically for databases that support explicit enum types. If the alphabetical ordering needs to be preserved for some reason, there should at least be a configuration option to use the intended ordering. With https://hibernate.atlassian.net/browse/HHH-16670, it is currently impossible (in Hibernate 6.2.3) to use the intended ordering without changing the enum mapping to ordinal. |