1. 엔티티 매핑 관련 어노테이션
- @Entity
- JPA에서 엔티티 클래스임을 나타내는 필수 어노테이션이다.
- 이 어노테이션이 붙은 클래스는 데이터베이스 테이블과 매핑된다.
- @Table
- 엔티티가 매핑될 테이블의 이름과 속성을 설정한다.
- 속성: name(테이블 이름), schema(스키마 이름), uniqueConstraints(유니크 제약 조건 설정) 등.
- @Id
- 기본 키로 사용될 필드를 지정한다.
- @GeneratedValue
- 기본 키 값을 자동으로 생성하는 전략을 정의한다.
- 전략: GenerationType.AUTO, GenerationType.IDENTITY, GenerationType.SEQUENCE, GenerationType.TABLE.
- @Column
- 엔티티의 필드를 매핑할 테이블 컬럼의 정보를 설정한다.
- 속성: name(컬럼 이름), nullable(NULL 허용 여부), length(길이), unique(유니크 제약) 등.
- @Transient
- 해당 필드는 데이터베이스에 매핑하지 않음을 나타낸다. 메모리에서만 사용되며, 영속성 컨텍스트에 포함되지 않는다.
- @Enumerated
- enum 타입을 매핑할 때 사용하며, EnumType.ORDINAL(정수 저장)과 EnumType.STRING(문자열 저장) 중 하나로 설정한다.
- @Lob
- Large Object 데이터를 매핑할 때 사용한다. String은 CLOB, byte[]는 BLOB로 매핑된다.
- @Temporal
- 날짜/시간 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용한다.
- 속성: TemporalType.DATE(년/월/일), TemporalType.TIME(시/분/초), TemporalType.TIMESTAMP(년/월/일 시/분/초).
2. 연관관계 매핑 관련 어노테이션
- @ManyToOne
- 다대일(Many-to-One) 관계를 정의하며, 외래 키가 있는 쪽이 연관관계의 주인이 된다.
- fetch = FetchType.LAZY 또는 FetchType.EAGER로 지연 로딩과 즉시 로딩을 설정할 수 있다.
- @OneToMany
- 일대다(One-to-Many) 관계를 정의하며, 반대편에서 연관관계의 주인이 된다.
- mappedBy 속성을 통해 연관관계의 주인이 아님을 설정한다.
- @OneToOne
- 일대일(One-to-One) 관계를 정의한다.
- 관계 설정 시 주로 양쪽에 외래 키가 존재하므로 어느 한쪽이 연관관계의 주인이 된다.
- @ManyToMany
- 다대다(Many-to-Many) 관계를 정의한다.
- 중간 테이블을 사용해 두 엔티티를 연결하며, @JoinTable을 사용해 중간 테이블을 설정할 수 있다.
- @JoinColumn
- 외래 키 컬럼을 매핑한다.
- 속성: name(외래 키 이름), referencedColumnName(참조하는 컬럼 이름), nullable, unique 등.
- @JoinTable
- 중간 테이블을 사용해 두 엔티티 간의 관계를 매핑한다.
- 속성: name(조인 테이블 이름), joinColumns(현재 엔티티의 외래 키 컬럼), inverseJoinColumns(반대 엔티티의 외래 키 컬럼) 등.
3. 고급 매핑 관련 어노테이션
- @Inheritance
- 엔티티 상속 구조를 매핑할 때 사용한다.
- 전략: InheritanceType.SINGLE_TABLE, InheritanceType.JOINED, InheritanceType.TABLE_PER_CLASS.
- @DiscriminatorColumn
- 상속 관계에서 부모 테이블에 자식 엔티티를 구분하기 위한 컬럼을 설정한다.
- 상속 전략 중 SINGLE_TABLE과 JOINED에서 주로 사용된다.
- @MappedSuperclass
- 공통 속성을 가진 엔티티 클래스를 정의할 때 사용하며, 이 클래스는 실제 테이블과 매핑되지 않는다.
- 이를 상속받은 클래스가 해당 속성을 물려받아 매핑할 수 있다.
- @Embeddable
- 임베디드 타입으로 사용할 클래스에 선언하며, 해당 클래스는 다른 엔티티에 포함될 수 있는 값 타입으로 정의된다.
- @Embedded
- 엔티티에 임베디드 타입의 객체를 포함할 때 사용한다.
- @AttributeOverride, @AttributeOverrides
- 임베디드 타입의 속성을 오버라이딩하여 매핑할 때 사용한다.
4. 값 타입 컬렉션 관련 어노테이션
- @ElementCollection
- 값 타입 컬렉션을 사용하고자 할 때 선언한다.
- 컬렉션 타입으로 리스트(List), 세트(Set), 맵(Map)을 사용할 수 있다.
- @CollectionTable
- 값 타입 컬렉션을 저장하는 별도의 테이블을 지정한다.
- 속성: name(컬렉션 테이블 이름), joinColumns(외래 키 컬럼 매핑).
5. 영속성 관리 관련 어노테이션
- @Access
- 필드 접근 방식과 프로퍼티 접근 방식을 설정한다.
- 전략: AccessType.FIELD, AccessType.PROPERTY.
- @Transient
- 영속성 관리에서 제외되며, 데이터베이스에 매핑되지 않는다.
- @PrePersist, @PostPersist
- 엔티티가 저장되기 전과 저장된 후에 실행될 콜백 메서드를 지정한다.
- @PreUpdate, @PostUpdate
- 엔티티가 업데이트되기 전과 업데이트된 후에 실행될 콜백 메서드를 지정한다.
- @PreRemove, @PostRemove
- 엔티티가 삭제되기 전과 삭제된 후에 실행될 콜백 메서드를 지정한다.
- @PostLoad
- 엔티티가 조회된 후에 실행될 콜백 메서드를 지정한다.
6. 영속성 전이 및 고아 객체 관리
- @Cascade
- 특정 엔티티의 상태 변화를 연관된 엔티티에 전파한다.
- 전이 옵션: CascadeType.ALL, CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH.
- orphanRemoval
- 부모 엔티티와의 관계가 끊어진 고아 객체를 자동으로 삭제한다.
- @OneToMany, @OneToOne 관계에서 사용되며, orphanRemoval = true로 설정하면 관계가 끊어진 자식 엔티티는 자동으로 삭제된다.
7. 기타 유용한 어노테이션
- @NamedQuery
- 정적 쿼리를 정의하여 사용할 수 있습니다. 성능 최적화를 위해 애플리케이션 시작 시 컴파일된다.
- @NamedNativeQuery
- 네이티브 SQL 쿼리를 정의하여 사용할 수 있습니다. 데이터베이스 종속적인 쿼리를 사용할 수 있다.
- @SqlResultSetMapping
- 네이티브 SQL을 사용할 때 조회 결과를 엔티티에 매핑할 수 있도록 설정한다.
- @Version
- 낙관적 락(Optimistic Lock)을 사용하기 위해 버전 필드를 지정합니다. 데이터베이스에서 동시에 수정하는 것을 방지하기 위해 주로 사용된다.
- @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 |