Whiteship's Note

[회사일] JPA로 계층구조 매핑하기

프로젝트/SLT : 2010.06.18 15:24


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

원래 이 회사에서 다루는 재고가 '신발' 하나였는데 이제 곧 '가방'까지 늘어날 예정인가 봅니다. 고객(울 회사 대표님)과 대화를 하지 않았다면 몰랐을텐데.. 초기에 알았으니 그나마 다행입니다. 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도 추가해봐야겠습니다.



저작자 표시
신고
top




: 1 : ··· : 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : ··· : 2639 :





티스토리 툴바