정적 데이터를 저장하기 위해 Enum과 매핑하려고하는 까다로운 작업이 있습니다.매핑 인터페이스를 구현하는 Enum 형식 컬렉션
이 같은 선언 열거 클래스를 시작합니다 : 문제는 컬렉션 매핑에 제공
List<MyInterface> elements
:
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;
}
}
은 지금은 이러한를 사용하고 싶습니다. 나는 EnumType.STRING으로 @Enumerated를 지속 할 때 오는 String 값뿐만 아니라 지속되는 enum의 클래스를 작성하기 위해 작성한 CompositeUserType을 사용하면 정상적으로 잘 유지할 수 있습니다. 이 경우
@Type(type="MyCustomEnumType.class")
@Columns(columns = {
@Column(name = "enumValue"), @Column(name = "enumClass")
})
private Enum enumValue;
내가 그들을 잘 유지 할 수 있지만, 컬렉션 @type를 사용하면 해당 사용자 지정 형식을 사용하여 영속화 해당 모음 내의 모든 항목을 만들 것입니다 있을지 불확실 해요 : 이러한 경우에 나는 선언 할 수 있습니다. @ElementCollection도 embeddable과 같으므로 사용해야합니까? 또는 내가 작성한 사용자 유형 클래스를 콜렉션의 targetClass로 사용합니까? 나는 그런 식으로 어떻게 작동하는지 약간 혼란 스럽다. 나는 컬렉션에 A 또는 B를 유지하기에 충분히 일반화하고 싶다. (비록 엔티티 당 오직 하나의 타입이 될 것이지만 둘 중 하나 일 수도있다.)
변경하지 않는 정적 데이터이기 때문에 이것을 Entity 클래스로 설정하지 않아도되지만 나중에 다른 열거 형이 될 새 버전이있을 수 있습니다.
JPA는 인터페이스 필드 또는 컬렉션을 지원하지 않습니다. –
DataNucleus