귀하의 질문은 약간 혼란 스럽기 때문에 제 해석이 잘못되었을 수 있습니다.
그러나 Option을 두 클래스로 나눠서 문제를 해결할 수있을 것으로 생각됩니다. Option은 두 개의 구체적인 하위 클래스 인 ListOption과 OTCOption이있는 추상 클래스를 만듭니다. 각 클래스에는 고유 한 판별 자 값 (3 또는 5)이 있습니다. 두 개의 하위 클래스에는 서로 다른 필드가 없을 수도 있지만이 경우 InstrumentTypeID를 모두 사용하여 Option을 의미하게합니다.
문제는 분명히 좋은 것은 아니지만 코드 구조에서 InstrumentType 테이블에있는 지식을 복제한다는 것입니다.
전적으로 데이터 중심으로 만들고 싶다면 Option과 Stock을 Instrument의 하위 클래스가 아니도록 변경해야한다고 생각합니다. 아마도 InstrumentDetails 인터페이스의 구현 일 수 있으며, 각 클래스는 자체적 인 엔티티가 될 것입니다. InstrumentType은 엔티티가 될 수도 있습니다. 편의상, 악기 자체에 대한 방법
@Entity
public class InstrumentType {
private static final Map<String, Class<? extends InstrumentDetails>> STORAGE_CLASSES = new HashMap<String, Class<? extends InstrumentDetails>>();
static {
STORAGE_CLASSES.put("Option", Option.class);
STORAGE_CLASSES.put("Stock", Stock.class);
}
public InstrumentDetails getDetails(Instrument inst) {
return getEntityManager().find(STORAGE_CLASSES.get(getStorageClass()), inst.getID());
}
// NB implementation of getEntityManager() is left as an exercise to the reader
}
: 그리고 당신은 다음 InstrumentType에게 같은 일부 코드를 줄 수있는 다음
@Entity
public class Instrument {
public InstrumentDetails getDetails() {
return getInstrumentType().getDetails(this);
}
}
을, 나는 세부 사항에 저장 클래스 문자열에서 매핑을 고정 배선 한 클래스를 사용하지만 구성 파일이나 인젝션을 통해 동적으로 가져올 수 있으므로 새 저장소 클래스를 쉽게 추가 할 수 있습니다.