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 옵션 활용 가능