JPA 엔터티 관계 ( @OneToMany, @ManyToOne, @JoinColumn )

song yuheon·2023년 9월 2일
0

Spring

목록 보기
42/93
post-thumbnail

JPA에서 엔터티 관계 설정하기: @OneToMany, @ManyToOne, @JoinColumn

JPA를 사용하면 데이터베이스 테이블 간의 관계를 Java 객체에 쉽게 매핑할 수 있다.

1. @OneToMany

@OneToMany는 엔터티 간의 일대다 관계를 표현한다. 예를 들면, 하나의 Memo 엔터티는 여러 개의 Comment 엔터티와 관련될 수 있다.

@OneToMany(mappedBy = "memo", cascade = CascadeType.REMOVE)
private List<Comment> comments = new ArrayList<>();
  • mappedBy: 이 속성은 관계의 소유측이 아닌 반대편 엔터티에 있는 필드 이름을 나타낸다. 여기서는 Commentmemo 필드를 가리킨다.
  • cascade: 부모 엔터티의 생명주기에 따라 자식 엔터티에 어떤 연산을 적용할지 결정한다. CascadeType.REMOVE 설정은 부모 엔터티(Memo) 삭제 시 자식 엔터티(Comment)도 함께 삭제되게 한다.

2. @ManyToOne

@ManyToOne는 엔터티 간의 다대일 관계를 표현한다. 즉, 여러 Comment 엔터티는 하나의 Memo 엔터티와 연관될 수 있다.

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "postId", referencedColumnName = "id", insertable = false, updatable = false)
private Memo memo;
  • fetch: 연관 엔터티 로딩 방식을 결정한다. FetchType.LAZYmemo 필드에 접근할 때만 실제로 Memo 엔터티를 로딩한다.

3. @JoinColumn

외래 키와 관련된 설정을 할 때 사용되는 어노테이션이다.

  • name: 현재 엔터티에서 사용되는 외래 키 컬럼 이름을 나타낸다.
  • referencedColumnName: 참조하는 대상 테이블의 컬럼 이름을 지정한다.
  • insertable, updatable: INSERT 혹은 UPDATE SQL 작성 시 해당 컬럼의 포함 여부를 결정한다.
profile
backend_Devloper

0개의 댓글