Как я могу преобразовать столбец Hibernate String в Enum? - PullRequest
3 голосов
/ 19 марта 2011

В настоящее время у меня есть простое поле 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!

1 Ответ

2 голосов
/ 19 марта 2011

Вы можете использовать EnumUserType , см. этот вопрос .

...