엔티티 클래스
- 정의: RDMS 테이블과 매핑되는 클래스
클래스 애너테이션
@Entity
- 정의/목적: 해당 클래스가 엔티티임을 알리는 애너테이션
- 사용법:
- 디폴트 : 클래스 이름과 같은 DB 테이블 매핑
- name 속성 : name의 값을 가진 DB 테이블 매핑 ex) @Entity(name = "meber_list")
@Entity
public class Entity{}
Lombok 애너테이션
@NoArgsConstructor
- 정의: 기본 생성자를 생성해주는 애너테이션
- 엔티티는 반드시 기본 생성자가 존재해야함 (필수)
- 특징: 접근 제어자는 public | protected여야만 한다. ( protected가 보안상 안전 )
- 예시:
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Entity{}
필드 애너테이션
기본키(PK) 설정
@Id
- 정의/목적: 기본키를 지정하는 애너테이션
- 엔티티에 반드시 존재해야함 (필수)
@GeneratedValue
- 정의: 기본키 생성 방식을 결정하는 애너테이션
- 목적: surrogate key(일련번호)를 기본키로 사용하는 경우 사용
- 속성
- starategy: 기본키 생성 방식 결정
- GeneraionType.AUTO : 선택한 데이터베이스 방언(dialect)에 따라 방식을 자동으로 선택(기본값)
- GenerationType.IDENTITY : 기본키 생성을 데이터베이스에 위임(= AUTO_INCREMENT)
- starategy: 기본키 생성 방식 결정
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;
일반 컬럼 설정
@Column
- 정의/목적: 컬럼에 대한 여러 설정을 하는 애너테이션
- 속성:
- name: 실제 테이블 컬럼 이름 입력
- 변수명과 동일하다면 생략 가능
- nullable: null값을 비활성화 하고 싶을때 사용
- 디폴트 값은 true
- updatable: 컬럼 값을 변경 불가능하고 싶을때 사용
- 디폴트 값은 true
- unique: 대체키를 설정하고 싶을때 사용
- 디폴트 값은 false
- name: 실제 테이블 컬럼 이름 입력
@Column(name="id", updatable = false)
private Long id;
@Column(name = "user_id", unique = true)
private Long userId;
@Column(name = "refresh_token", nullable = false)
private String refreshToken;
외래키(FK) 설정
연관 관계
기본적으로 연관관계 관련 애너테이션은 위 처럼 4가지가 존재하지만, 외래키를 생각해보자
- 1:1 관계 - 두 테이블중 애플리케이션 관점에서 더 자주 참조하는 테이블에 삽입
- 1:N 관계 - N쪽인 테이블에 삽입
- N:M 관계 - 관계 테이블을 생성하여, N:M 관계를 해소
즉, 외래키가 삽입 되는 테이블 기준으로 연관 관계는 1:1과 N:1 만 생각을 해주면 된다.
//targetEntity 속성에는 참조하는 테이블 클래스 설정
@ManyToOne(targetEntity = Entity2.class)
외래키 지정
- @JoinColum 애너테이션 사용
- name: 외래키(fk)의 컬럼 이름
- foreignKey = @ForeignKey(name = "외래키 제약 이름 설정")
- 필드는 참조하려는 엔티티 객체를 설정
@ManyToOne(targetEntity = Entity2.class)
@JoinColumn(name = "e2_id", foreignKey = @ForeignKey(name = "fk_entity_e2_id"))
private Entity2 e2;
최종 예시
package me.jangwoojin.praticeSpringboot;
import jakarta.persistence.*;
import lombok.*;
@Entity // 1. 엔티티 클래스 지정
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED) // 2. 기본 생성자
@AllArgsConstructor
public class Member {
@Id // 3. 기본키 지정
@GeneratedValue(strategy = GenerationType.IDENTITY) //자동으로 1증가
@Column(name = "id", updatable = false) //name 이라는 NOT NULL 컬럼과 매핑
private Long id;
@Column(name = "name", updatable = false)
private String name;
}
'Spring > 기본 구성' 카테고리의 다른 글
+4. DTO를 record type으로 설정 (0) | 2024.02.06 |
---|---|
8. Repository 클래스 with. JDBC, JPQL(JPA), QueryDSL (0) | 2024.01.18 |
6. ORM 개념 with. Spring Data JPA (0) | 2024.01.18 |
5. Service 클래스 (0) | 2024.01.18 |
4. Controller 클래스 with. DTO (0) | 2024.01.18 |