본문 바로가기

Backend study/JPA

어노테이션 정리

1. 엔티티 매핑 관련 어노테이션

  1. @Entity
    • JPA에서 엔티티 클래스임을 나타내는 필수 어노테이션이다.
    • 이 어노테이션이 붙은 클래스는 데이터베이스 테이블과 매핑된다.
  2. @Table
    • 엔티티가 매핑될 테이블의 이름과 속성을 설정한다.
    • 속성: name(테이블 이름), schema(스키마 이름), uniqueConstraints(유니크 제약 조건 설정) 등.
  3. @Id
    • 기본 키로 사용될 필드를 지정한다.
  4. @GeneratedValue
    • 기본 키 값을 자동으로 생성하는 전략을 정의한다.
    • 전략: GenerationType.AUTO, GenerationType.IDENTITY, GenerationType.SEQUENCE, GenerationType.TABLE.
  5. @Column
    • 엔티티의 필드를 매핑할 테이블 컬럼의 정보를 설정한다.
    • 속성: name(컬럼 이름), nullable(NULL 허용 여부), length(길이), unique(유니크 제약) 등.
  6. @Transient
    • 해당 필드는 데이터베이스에 매핑하지 않음을 나타낸다. 메모리에서만 사용되며, 영속성 컨텍스트에 포함되지 않는다.
  7. @Enumerated
    • enum 타입을 매핑할 때 사용하며, EnumType.ORDINAL(정수 저장)과 EnumType.STRING(문자열 저장) 중 하나로 설정한다.
  8. @Lob
    • Large Object 데이터를 매핑할 때 사용한다. String은 CLOB, byte[]는 BLOB로 매핑된다.
  9. @Temporal
    • 날짜/시간 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용한다.
    • 속성: TemporalType.DATE(년/월/일), TemporalType.TIME(시/분/초), TemporalType.TIMESTAMP(년/월/일 시/분/초).

 

2. 연관관계 매핑 관련 어노테이션

  1. @ManyToOne
    • 다대일(Many-to-One) 관계를 정의하며, 외래 키가 있는 쪽이 연관관계의 주인이 된다.
    • fetch = FetchType.LAZY 또는 FetchType.EAGER로 지연 로딩즉시 로딩을 설정할 수 있다.
  2. @OneToMany
    • 일대다(One-to-Many) 관계를 정의하며, 반대편에서 연관관계의 주인이 된다.
    • mappedBy 속성을 통해 연관관계의 주인이 아님을 설정한다.
  3. @OneToOne
    • 일대일(One-to-One) 관계를 정의한다.
    • 관계 설정 시 주로 양쪽에 외래 키가 존재하므로 어느 한쪽이 연관관계의 주인이 된다.
  4. @ManyToMany
    • 다대다(Many-to-Many) 관계를 정의한다.
    • 중간 테이블을 사용해 두 엔티티를 연결하며, @JoinTable을 사용해 중간 테이블을 설정할 수 있다.
  5. @JoinColumn
    • 외래 키 컬럼을 매핑한다.
    • 속성: name(외래 키 이름), referencedColumnName(참조하는 컬럼 이름), nullable, unique 등.
  6. @JoinTable
    • 중간 테이블을 사용해 두 엔티티 간의 관계를 매핑한다.
    • 속성: name(조인 테이블 이름), joinColumns(현재 엔티티의 외래 키 컬럼), inverseJoinColumns(반대 엔티티의 외래 키 컬럼) 등.

 

3. 고급 매핑 관련 어노테이션

  1. @Inheritance
    • 엔티티 상속 구조를 매핑할 때 사용한다.
    • 전략: InheritanceType.SINGLE_TABLE, InheritanceType.JOINED, InheritanceType.TABLE_PER_CLASS.
  2. @DiscriminatorColumn
    • 상속 관계에서 부모 테이블에 자식 엔티티를 구분하기 위한 컬럼을 설정한다.
    • 상속 전략 중 SINGLE_TABLEJOINED에서 주로 사용된다.
  3. @MappedSuperclass
    • 공통 속성을 가진 엔티티 클래스를 정의할 때 사용하며, 이 클래스는 실제 테이블과 매핑되지 않는다.
    • 이를 상속받은 클래스가 해당 속성을 물려받아 매핑할 수 있다.
  4. @Embeddable
    • 임베디드 타입으로 사용할 클래스에 선언하며, 해당 클래스는 다른 엔티티에 포함될 수 있는 값 타입으로 정의된다.
  5. @Embedded
    • 엔티티에 임베디드 타입의 객체를 포함할 때 사용한다.
  6. @AttributeOverride, @AttributeOverrides
    • 임베디드 타입의 속성을 오버라이딩하여 매핑할 때 사용한다.

 

4. 값 타입 컬렉션 관련 어노테이션

  1. @ElementCollection
    • 값 타입 컬렉션을 사용하고자 할 때 선언한다.
    • 컬렉션 타입으로 리스트(List), 세트(Set), 맵(Map)을 사용할 수 있다.
  2. @CollectionTable
    • 값 타입 컬렉션을 저장하는 별도의 테이블을 지정한다.
    • 속성: name(컬렉션 테이블 이름), joinColumns(외래 키 컬럼 매핑).

 

5. 영속성 관리 관련 어노테이션

  1. @Access
    • 필드 접근 방식프로퍼티 접근 방식을 설정한다.
    • 전략: AccessType.FIELD, AccessType.PROPERTY.
  2. @Transient
    • 영속성 관리에서 제외되며, 데이터베이스에 매핑되지 않는다.
  3. @PrePersist, @PostPersist
    • 엔티티가 저장되기 전저장된 후에 실행될 콜백 메서드를 지정한다.
  4. @PreUpdate, @PostUpdate
    • 엔티티가 업데이트되기 전업데이트된 후에 실행될 콜백 메서드를 지정한다.
  5. @PreRemove, @PostRemove
    • 엔티티가 삭제되기 전삭제된 후에 실행될 콜백 메서드를 지정한다.
  6. @PostLoad
    • 엔티티가 조회된 후에 실행될 콜백 메서드를 지정한다.

 

6. 영속성 전이 및 고아 객체 관리

  1. @Cascade
    • 특정 엔티티의 상태 변화를 연관된 엔티티에 전파한다.
    • 전이 옵션: CascadeType.ALL, CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH.
  2. orphanRemoval
    • 부모 엔티티와의 관계가 끊어진 고아 객체를 자동으로 삭제한다.
    • @OneToMany, @OneToOne 관계에서 사용되며, orphanRemoval = true로 설정하면 관계가 끊어진 자식 엔티티는 자동으로 삭제된다.

 

7. 기타 유용한 어노테이션

  1. @NamedQuery
    • 정적 쿼리를 정의하여 사용할 수 있습니다. 성능 최적화를 위해 애플리케이션 시작 시 컴파일된다.
  2. @NamedNativeQuery
    • 네이티브 SQL 쿼리를 정의하여 사용할 수 있습니다. 데이터베이스 종속적인 쿼리를 사용할 수 있다.
  3. @SqlResultSetMapping
    • 네이티브 SQL을 사용할 때 조회 결과를 엔티티에 매핑할 수 있도록 설정한다.
  4. @Version
    • 낙관적 락(Optimistic Lock)을 사용하기 위해 버전 필드를 지정합니다. 데이터베이스에서 동시에 수정하는 것을 방지하기 위해 주로 사용된다.
  5. @Cacheable
    • 엔티티의 캐싱을 설정하여 성능을 최적화할 수 있다.
728x90

'Backend study > JPA' 카테고리의 다른 글

값 타입  (0) 2024.11.01
프록시와 연관관계 관리  (0) 2024.10.30
고급 매핑  (0) 2024.10.29
다양한 연관관계 매핑  (0) 2024.10.25
연관관계 매핑 기초  (1) 2024.10.22