문제

다음과 같은 최대 절전 모드 매핑이 있습니다. 콘크리트 클래스 계층 별 테이블을 사용하여 매핑해야합니다.

<hibernate-mapping package='dao'>
    <meta attribute='class-description'></meta>
    <class name='PropertyDAO'>
        <id name='id' column='id_property'>
            <generator class='assigned'/>
        </id>
        <property name='address' column='address' type='string'/>
        <union-subclass name='HouseDAO' table='house'>
            <property name='noOfRooms' column='noOfRooms'/>
            <property name='totalArea' column='totalArea'/>
            <property name='price' column='price'/>
        </union-subclass>
        <union-subclass name='LandDAO' table='land'>
            <property name='area' column='area'/>
            <property name='unitPrice' column='unitPrice'/>
        </union-subclass>
    </class>
</hibernate-mapping>

데이터베이스에는 2 개의 테이블 만 있습니다.

  • 하우스 (ID_Property (PK), 주소, Noofrooms, TotalArea, 가격)
  • 토지 (ID_Property (PK), 주소, 지역, 단원)

내가 이해 한 한,이 경우 .save ()를 호출하기 전에 ID를 명시 적으로 생성해야하므로 내 질문은 다음과 같은 것입니다. 결합 될 때 연속 도메인을 형성하십시오.

도움이 되었습니까?

해결책 3

해결책은 다음 ID를 저장하는 다른 테이블을 만드는 것입니다. 이 값은 사용자가 새 엔티티를 삽입 할 때마다 수정해야합니다. 이런 식으로 도메인은 연속적입니다

다른 팁

DB의 모델은 관련된 여러 테이블에서 중복 정보가 있으므로 잘못된 것입니다.

콘크리트 클래스 당 테이블은 상속 모델로, 런타임에 문제가 발생하여 토지 주소를 업데이트하지만 (의미 적으로) 집의 주소를 업데이트 할 수있는 상황을 가질 수 있습니다. IOW :이 모델을 떨어 뜨리고 서브 클래스 당 테이블을 소개하므로 ID와 주소가있는 속성베이스 테이블과 PK가있는 PK가있는 두 개의 분리 된 테이블이 있습니다. , 다른 하나는 토지 특정 필드가있는 토지입니다.

엔터티 유형 간의 상속을 관계형 테이블로 변환하는 방법이므로 가장 적은 수의 문제를 줄 것입니다 (Niam/ORM에 대한 Nijssen/Halpin의 책 참조).

나는 합류 서브 클래스와 함께 다음을 사용했습니다

<key column="id"/>

이로 인해 서브 클래스는 속성 테이블의 ID를 사용해야합니다. (Super) 열은 슈퍼에 대한 외국 참조 인 하위 클래스의 열을 나타냅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top