У меня есть сложная вещь, которую я пытаюсь сопоставить с 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, поскольку он таков, что его можно встроить? Или я использую класс пользовательского типа, который я написал, в качестве целевого класса коллекции? Я немного смущен тем, как это работает для чего-то подобного. Я хочу, чтобы он был достаточно общим, чтобы сохранять A или B, возможно, в коллекции (хотя в конечном итоге он будет только одним типом для каждого объекта, но может быть и тем, и другим).
Я бы предпочел не настраивать это как класс Entity, поскольку это статические данные, которые не изменятся, но в будущем может появиться новая версия, которая в конечном итоге станет другим перечислением.