2010-12-09 5 views
0

는 다음과 같은 문제에 대한 더 나은 해결책을 찾기 위해 좀 도와 주시겠습니까 최대 절전 모드로 ... 내 도메인 모델에서 계층 구조가 있습니다 는 :변환 유형이/NHibernate에와 부속 유형

class Document { 
    Int Id; 
    String Title; 
} 
class Agreement : Document { 
    DateTime Signed; 
} 

영구 전략이다 클래스 당 테이블. 나는. 2 테이블 : '문서'(ID, ...) 및 '계약'(Fk_document, ...)

첫 번째 작업은 문서의 등록입니다. 지금은 문서의 실제 유형을 알지 못합니다. 그래서 나는 새 Document를 만들고 속성 'Title'을 채 웁니다.

잠시 후 추가 정보를받습니다. 그것에 따르면 이전에 등록 된 문서는 실제로 어떤 날짜에 서명 된 계약이었습니다. 이제 계약의 '서명 된'속성을 채울 수 있습니다.

그러나 이렇게하려면 어떻게 든 형식을 문서에서 계약으로 변환해야합니다. 나는 다음과 같은 SQL이-전화를 만들 수 :

를 ('1111111'은 Hibernate가 그것을 처음 저장하는 동안 문서에 할당 ID입니다)

INSERT INTO AGREEMENTS (FK_DOCUMENT, SIGNED_DATE) VALUES (1111111, TO_DATE('01-01-2000')) 

나는 그것이 전혀 가장 좋은 방법입니다 믿습니다! 하지만 다른 사람들을 찾을 수 없었습니다 ... 고마워요!

(나는이 예제를 생각 실제 사용의 경우는 오히려 어려운 내가 질문을 저당하고 싶지 않다. 문서는 가능한 한 빨리 저장해야합니다)

답변

1

당신은 '클래스를 변경해야하는 경우 '라고 말하면, 이것을 클래스 계층 구조로 모델링하고 싶지 않다는 신호입니다. 대신 구성을 사용하십시오.

+0

고마워요! 일반적으로 나는 너에게 동의한다. 다음 버전 중 하나에서 카테고리와 같은 모델을 추가 할 예정입니다. 따라서 문서에는 계약의 속성이있는 AgreementCategory와 같은 속성이 포함됩니다. 그것은 일종의 건축 적 결정이 될 것입니다. 그러나 이제 문제는 Nhibernate 방법으로 클래스를 변경하는 방법입니다 (가능한 경우). – barser

+0

@barser : SQL에 의존하거나 이전 객체의 속성 값을 복사하는 새 인스턴스를 만들어야합니다. –