Мне нужно отобразить перечисления, которые заранее не реализовали интерфейс к существующей базе данных, которая хранит перечисления в той же таблице, что и класс владельца, используя @Enumerated(EnumType.STRING)
.Отображение перечисления Hibernate
class A {
HasName name;
}
interface HasName {
String getName();
}
enum X implements HasName {
John, Mary;
public String getName() { return this.name(); }
}
enum Y implements HasName {
Tom, Ann;
public String getName() { return this.name(); }
}
Как должно обрабатываться отображение в этом случае? Сохранение базы данных не изменяется, поскольку все перечисления, реализующие интерфейс, будут иметь разные значения, но я не уверен, как объекты должны быть извлечены из БД (нужен ли мне настраиваемый сопоставитель, который попытается создать экземпляр enum с использованием указанных классов enum? Поддерживает ли Hibernate эту функциональность?).
В моем случае я не знаю, что будет класс перечисления. При создании экземпляра 'A', Hibernate нужно будет выбрать одну из перечней {X, Y}. – dm3
Не следует пытаться настроить пример реализации UserType в соответствии с вашими потребностями. Например, вместо сохранения только значения вы можете также сохранить класс (например, com.example.X.John или X.John, но вам понадобится сопоставление от X до com.example.X) – sfussenegger
Средства I нужен пользовательский сопоставитель (не видел вашу ссылку на pastebin). Спасибо за ответ. – dm3