TIL

[250403 TIL ] JPA, Lombok, Hibernate 심화 어노테이션

도원좀비 2025. 4. 3. 20:34

1️⃣ @ManyToOne

  • 다대일(N:1) 연관관계 설정
  • fetch = LAZY를 기본으로 사용해 성능 최적화
  • 연관관계의 주인으로 외래키를 관리함
  • @JoinColumn 함께 사용해 외래키 컬럼 명시

2️⃣ @EmbeddedId / @Embeddable

  • 복합키(Composite Key)를 사용하는 경우 사용
  • @EmbeddedId는 엔티티에서, @Embeddable은 키 클래스에서 사용
  • equals()와 hashCode()는 필수로 구현해야 하며, @EqualsAndHashCode로 간단히 처리 가능

3️⃣ @Convert

  • 자바 객체 ↔ DB 값 변환을 위한 어노테이션
  • AttributeConverter 구현체를 통해 커스텀 타입 변환 가능
  • enum ↔ String, Boolean ↔ "Y/N", LocalDate ↔ String 등 다양한 변환에 활용

4️⃣ @Type

  • Hibernate 확장 어노테이션
  • Map, List, 복합 객체 등을 JSON 컬럼에 저장할 때 사용
  • JsonType.class 사용 시 별도 의존성 필요 (hibernate-types)

5️⃣ @Builder

  • 객체 생성 시 Builder 패턴 적용
  • 생성자보다 안전하고 가독성이 높음
  • DTO → Entity 변환 등에 주로 사용
  • @Builder.Default를 통해 기본값 지정 가능

6️⃣ @EqualsAndHashCode

  • 객체의 동등성 비교 기준을 자동 생성
  • 복합키 클래스에서 반드시 필요
  • 컬렉션(Set, Map 등)에서 정상 동작을 위해 꼭 구현해야 함

7️⃣ @MapsId

  • 복합키의 일부가 외래키일 때 사용
  • 연관 엔티티의 식별자 값을 식별자로 자동 동기화
  • 외래키 + 복합키를 동시에 매핑할 때 필수

8️⃣ @OneToMany

  • 일대다(1:N) 관계 설정
  • 실무에서는 대부분 양방향 매핑 + mappedBy를 사용
  • @JoinColumn 없이 단방향 설정 시 중간 조인 테이블이 생기므로 비추천
  • cascade, orphanRemoval 옵션 활용 가능