It's possible to define enumerations in JPA using either
@Enumerated(EnumType.ORDINAL)
or
@Enumerated(EnumType.STRING)
I wonder what are advantages and disadvantages of those two definitions?
I heard that ORDINAL performs better (is faster) than STRING with EclipseLink.
Is that true?
I always go STRING
.
Speed is rarely the most important issue - readability and maintainability are more important.
I use STRING
because it's a lot easier to manually inspect rows from the database, but more importantly, I can do two things, without touching the database, the ORDINAL
can't handle:
Both of these changes will alter the ordinal values of the enums already in use in the database, thus breaking existing data if you are using ORDINAL
.
If you change an enum value (not that common), handling it is simple:
UPDATE table SET enum_column = 'NEW_ENUM_NAME' where enum_column = 'OLD_ENUM_NAME';