하이버 번역서를 보시면 여러가지 방법이 나와있는데 그 중에서 가장 간단하면서, 성능도 좋고, 다형성까지 살릴 수 있는 방법으로 “계층 구조 당 테이블” 매핑 방법을 소개하고 있습니다.

원래 이 회사에서 다루는 재고가 ‘신발’ 하나였는데 이제 곧 ‘가방’까지 늘어날 예정인가 봅니다. 고객(울 회사 대표님)과 대화를 하지 않았다면 몰랐을텐데.. 초기에 알았으니 그나마 다행입니다. Item이라는 클래스에 신발 정보 다 넣어놓고 이런 얘기 했다면… @_@ 좀 피곤했을텐데 말이죠. 다행히 테스트용으로 두 세개 밖에 안넣어봤거든요.ㅋ
어쨋든..
Item을 상위클래스로 두고, Shoes와 Bag을 하위 클래스로 설계하고 싶어졌습니다.
그래서 모든 상품에 기본적으로 들어갈만한 속성은 Item에 남겨두고 JPA 계층 구조 매핑을 추가했습니다.
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
    name = “ITEM_TYPE”,
    discriminatorType = DiscriminatorType.STRING
)
public class Item {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column
    @Type(type = “text”)
    private String descr;
    @Column(length = 50)
    private String name;
    @Column(length = 50)
    private String number;
    @Column
    private String image;
    @Column
@Type(type=”smdis.domain.usertype.SexUserType”)
    private Sex sex;
    @ManyToOne
    private Color color;
}
그다음 이 클래스를 상속받는 Shoes라는 도메인을 만들었습니다.
@Entity
@DiscriminatorValue(“SHO”)
public class Shoes extends Item {
    
    @Column(name = “SHO_SIZE”)
@Type(type=”smdis.domain.usertype.ShoesSizeUserType”)
    private ShoesSize size;
    public ShoesSize getSize() {
        return size;
    }
    public void setSize(ShoesSize size) {
        this.size = size;
    }
}
간단하네요. Bag도 추가해봐야겠습니다.