최대 절전 모드의 콘크리트 클래스 계층 구조 당 테이블
-
03-07-2019 - |
문제
다음과 같은 최대 절전 모드 매핑이 있습니다. 콘크리트 클래스 계층 별 테이블을 사용하여 매핑해야합니다.
<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) 열은 슈퍼에 대한 외국 참조 인 하위 클래스의 열을 나타냅니다.
제휴하지 않습니다 StackOverflow