2011-02-01 5 views
9

두 개의 하이버 네이트 클래스가 있습니다 : 기본 클래스와 추가 필드가있는 확장 클래스. (.이 필드는 다른 테이블에 의해 매핑됩니다) 예를 들어DTYPE 컬럼없이 최대 절전 모드의 테이블에 여러 클래스 매핑하기

을, 내가 가진 :

@Entity 
@Table(name="Book") 
public class A { 
    private String ID; 
    private String Name; 
    // ... 
} 

@Entity 
@Table(name="Book") 
public class B extends A { 
    public String node_ID; 
    // ... 
} 

public class Node { 
    public String ID; // maps to B.node_ID 
    // ... 
} 

가 어떻게 Hibernate에서이지도를합니까? The hibernate documentation에는 세 가지 유형의 상속 구성이 명시되어 있습니다. 클래스 당 하나의 테이블, 유형 열이있는 테이블 하나 및 조인 테이블 -이 중 아무 것도 적용되지 않습니다.

클래스 A는 여러 프로젝트에서 재사용되는 일반 프레임 워크의 클래스이고 클래스 B (및 노드)는 하나의 프로젝트에만 적용되는 확장 기능이기 때문에 다시 사용되지 않습니다. 앞으로 house_ID 또는 다른 필드가있는 클래스 C가있을 수 있습니다.

편집 : 나는 위의 의사 코드 구성 (같은 테이블에 매핑이 엔티티) 나는 DTYPE 열이 존재하지 않는 오류가 발생하는 시도합니다. HQL을 갖는 "어디 DTYPE ="A "첨부

+0

이러한 클래스가 판별 자 컬럼없이 동일한 테이블에 매핑되는 경우, 어떻게하는 어떤 구별 최대 절전 모드 것인가? – axtavt

+0

@axtavt 그것이 핵심이며 B의 모든 인스턴스도 A. – ashes999

답변

10

이것은 @DiscriminatorColumn 두 클래스에 대해 동일한 값 @DiscriminatorValue 매핑함으로써 가능하다. 이것은 그 관계없이 동일한 데이터가 사용하는 컬럼으로부터 일 수있다 (이 널 (null) 값으로 작동 있는지 확실하지 않습니다)를 입력

클래스는 지금과 같아야합니다.

@Entity 
@Table(name="Book") 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="published") 
@DiscriminatorValue(value="true") 
public class A { 
    private String ID; 
    private String Name; 
    // ... 
} 

@Entity 
@Table(name="Book") 
@DiscriminatorValue(value="true") 
public class B extends A { 
    public String node_ID; 
    // ... 
} 
관련 문제