• Feed
  • Explore
  • Ranking
/
/
    JPA

    @OneToMany

    @OneToMany 옵션
    @OneToManymappedBycascadeorphanRemoval
    h
    hyeonZIP
    2025.11.16
    ·
    2 min read

    @OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<CodeFile> codeFiles;

    mappedBy

    • 양방향 관계임을 명시하기 위한 옵션

    • 실제 외래키가 관리되지 않는 Entity에서 mappedBy옵션을 사용한다.

    8329

    왜 mappedBy라는 옵션이 탄생한 걸까?

    우선 mappedBy를 사용하지 않는 경우 생성되는 테이블은 다음과 같다.

    @OneToMany
    private List<CodeFile> codeFiles;
    8330

    중간 테이블을 자동 생성해준다.

    이런 경우 mappedBy에 비해 post의 code_file의 컬럼을 조회하기 위해서 2번 join을 하면서 비효율적이게 된다.

    cascade

    영속성 전파의 범위를 설정하는 옵션

    public enum CascadeType {
        ALL,
        PERSIST,
        MERGE,
        REMOVE,
        REFRESH,
        DETACH;
    
        private CascadeType() {
        }
    }

    영속성 컨텍스트 생명주기에 관해 찾아보면 알 수 있는 용어들이다.

    orphanRemoval

    부모와의 관계가 끊어진 자식 Entity를 자동으로 삭제하는 옵션

    orphan=고아 removal=삭제

    CascadeType.REMOVE와 유사하지만 CascadeType.REMOVE는 PostEntity를 삭제해야 자식 Entity인 CodeFileEntity도 삭제되는 반면, orphanRemoval=true로 설정하면 PostEntity에 있는 List<CodeFile>에서 list.remove()만 해주어도 자식 Entity가 삭제된다.







    - 컬렉션 아티클