[회사일] JPA로 계층구조 매핑하기
하이버 번역서를 보시면 여러가지 방법이 나와있는데 그 중에서 가장 간단하면서, 성능도 좋고, 다형성까지 살릴 수 있는 방법으로 "계층 구조 당 테이블" 매핑 방법을 소개하고 있습니다.
원래 이 회사에서 다루는 재고가 '신발' 하나였는데 이제 곧 '가방'까지 늘어날 예정인가 봅니다. 고객(울 회사 대표님)과 대화를 하지 않았다면 몰랐을텐데.. 초기에 알았으니 그나마 다행입니다. 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도 추가해봐야겠습니다.