В настоящее время у меня есть простое поле String в постоянном классе Hibernate:
private String font = "Times New Roman";
"Times New Roman" является значением по умолчанию, поэтому многие хранимые объекты имеют эти данные. По нескольким причинам я хотел бы преобразовать это в Enum:
@Enumerated(EnumType.String)
private FontEnum font = FontEnum.TIMES;
Hibernate использует Enum.valueOf (clazz, string) для преобразования данных столбца, что приведет к ошибке в "Times New Roman" из-за пробелов.
Google предлагает переопределить Enum.valueOf () невозможно; другие знают по-другому? Могу ли я обмануть Enum.valueOf (), чтобы преобразовать «Times New Roman» в FontEnum.TIMES?
Или я могу создать собственный конвертер Hibernate, например:
public FontEnum legacyConverter(String old);
и добавьте
@Enumerated(EnumType.String)
@Converter(Converters.legacyConverter()) // Does this exist?
private FontEnum font = FontEnum.TIMES;
к моим полям? Я не видел ничего подобного.
Я знаю, что запасным методом было бы добавить некоторую пре-персистентную логику, которая медленно переносит данные в другой столбец, но я бы хотел этого избежать.
Спасибо - это мой первый вопрос по StackOverflow!