У меня есть хитрая вещь, которую я пытаюсь сопоставить с Enums для хранения статических данных.
Он начинается с перечисления классов, объявленных так:
interface MyInterface {
String getName();
}
public enum A implements MyInterface {
FIRST_A("First A");
private final String name;
private A(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String toString() {
return name;
}
}
public enum B implements MyInterface {
FIRST_B("First B");
private final String name;
private B(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String toString() {
return name;
}
}
Теперь я хочу использовать их как:
List<MyInterface> elements
Проблема заключается в отображении коллекции. Я могу сохранить это нормально, если я использую CompositeUserType, который я написал для записи класса сохраняемого перечисления, а также значение String, которое будет получено при сохранении @Enumerated с EnumType.STRING. В этих случаях я могу заявить:
@Type(type="MyCustomEnumType.class")
@Columns(columns = {
@Column(name = "enumValue"), @Column(name = "enumClass")
})
private Enum enumValue;
В этом случае я могу сохранить их очень хорошо, но я не уверен, что использование @Type в коллекции заставит все элементы в этой коллекции сохраняться с использованием этого пользовательского типа. Должен ли я использовать @ElementCollection, так как он таков, что он встраиваемый? Или я использую класс пользовательского типа, который я написал, как targetClass коллекции? Я немного запутался в том, как это работает для чего-то подобного. Я хочу сохранить его достаточно универсальным, чтобы сохранить A или B, возможно, в коллекции (хотя в конечном итоге это будет только один тип для сохраняемой сущности, но может быть и другим).
Я бы предпочел не устанавливать его как класс Entity, поскольку он представляет собой статические данные, которые не изменятся, но могут иметь новую версию в будущем, которая в итоге станет другим перечислением.