Whiteship's Note

JPA @JoinColumn

Hibernate/Annotation : 2007.09.22 15:18


참조 :http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html#JoinColumn
링크에 내용이 상당히 많아서 정리는 나중에 하기로 하고...

사용자 삽입 이미지

이름이 암시 하듯이 Join 컬럼 설정을 할 때 사용합니다. 위의 관계에서 Post에 Catergory 의 주키를 외례키로 가짐으로써 Join을 하고 있으니... Post Entity의 getCategory()에 @JoinColumn을 붙여 줍니다.

그러면 Post 테이블을 만들 때 join column 이름을 기본으로 Entity 명 + 언더바 + 주키 를 사용합니다.

public class Category {

    private Long categoryId;

    ..
}

현재 Category 클래스가 위와 같기 때문에 외례키(join column)이 categoty_categoryId 와 같은 형태로 생기게 됩니다. 별로 멋진 이름은 아닌 것 같으니 다음과 같이 설정해 줍니다.

    @ManyToOne(fetch=FetchType.LAZY, optional=false)
    @JoinColumn(name="categoryId")
    public Category getCategory() {
        return category;
    }

그리고  이전 글에서 잠시 고민했었던 cascading 설정은 Category를 지우면 해당 Categorry에 모든 Post마저 삭제 되도록 Category에 설정해 주겠습니다. 이밖에도 모든 cascading을 적용하도록 아예 all로 하겠습니다.

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "category", cascade = { CascadeType.ALL })
    public Set<Post> getPosts() {
        if (posts == null)
            posts = new HashSet<Post>();
        return posts;
    }

자 이제 설정은 마쳤고 제대로 설정을 한 건지, 원하는 대로 동작 하는지 테스트를 해봐야겠습니다.
신고

'Hibernate > Annotation' 카테고리의 다른 글

@CollectionOfElements 애노테이션  (0) 2008.09.19
Table 애노테이션  (0) 2008.06.19
JPA @Transient  (0) 2007.09.27
JPA @JoinColumn  (1) 2007.09.22
JPA @ManyToOne  (0) 2007.09.22
JPA @OneToMany  (0) 2007.09.22
top







티스토리 툴바