JPA:자바에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음이다.

 

@Entity

해당클래스를 테이블과 매핑한다고 JPA에게 알린다.

 

@Table

엔티티 클래스에 매핑할 테이블 정보를 지정한다.

만약 생략하게 되면 클래스 이름을 테이블 이름으로 매핑한다. 

 

@Table 옵션

name 테이블 명
catalog 테이블 카테고리
schema 테이블 스키마
uniqueConstraints 컬럼값 유니크 제약조건
indexes 인덱스 생성

 

@Access

JPA가 엔티티 데이터에 접근하는 방식을 지정합니다.

 

@Entity
@Access(AccessType.FIELD)
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

@Entity
@Access(AccessType.PROPERTY)
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

 

@Access 옵션

AccessType.Field 필드에 직접 접근
AccessType.PROPERTY getter을 통해 접근

 

@Id

엔티티 클래스의 필드를 테이블의 기본키(PK)에 매핑합니다.

사용된 필드를 식별자 필드라 하며 주로 @GenerateValue와 같이 이용해서 식별키를 어떤 전략으로 생성하는지 명시한다.

 

 

@Column

엔티티 클래스의 필드를 컬럼에 매핑한다.

name 컬럼 이름
unique 유니크 여부(DDL)
nullable null 허용 여부(DDL)
insertable 추가 가능 여부(DDL, DML)
updateable 수정 가능 여부(DDL, DML)
table 테이블 이름(하나의 엔티티를 두개 이상의 테이블에 매핑할 때 사용
columnDefinition 데이터베이스 컬럼 정보 직접 부여(DDL)
length 컬럼 사이즈(default:225) (DDL)
percision 소수 정밀도(default:0) (DDL)
scale 소수점 이하 자리수(default:0) (DDL)

* DDL: 테이블, 뷰, 인덱스 및 프로시저와 같은 데이터베이스 및 개체의 구조를 정의

* DML: 데이터베이스 내의 데이터를 조작하는 데 사용

 

@GenerateValue

데이터베이스에 의해 자동으로 생성될 값에 대한 전략을 지정

보통 식별키 생성 전략으로 많이 사용

 

@GenerateValue 옵션AUTO: 특정 데이터베이스에 맞게 자동으로 생성되는 방식

    @Id //primary key 설정
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id;

 

IDENTITY: 기본키 생성 방식 자체를 데이터베이스에 위임하는 방식 데이터베이스에 의존 방식(MySQL MariaDB 등)

    @Id //primary key 설정
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

 

TABLE: 데이터베이스 종류 상관없이 별도의 키를 생성해주는 채번 테이블을 이용하는 방법

성능이 좋지않아 권장하진않는다.

@TableGenerator가 필요하다

@Entity
@TableGenerator(name = "MEMBER_SEQ_GENERATOR",
        table = "MY_SEQUENCES",
        pkColumnValue = "MEMBER_SEQ",
        allocationSize = 1) 
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE,
            generator = "MEMBER_SEQ_GENERATOR")
    private Long id;
}
속성 설명 기본
name 식별자 생성기 이름 필수
table 키생성 테이블명 hibernate_sequence
pkColumnName 시퀸스 컬럼명 sequence_name
valueColumnName 시퀸스 값 컬럼명 next_val
pkColumnValue 키로 사용할 값 이름 엔티티이름
initialValue 초기 값, 마지막으로 생성된 값이 기준 0
allocationSize 시퀸스 한 번 호출에 증가하는 수(성능 최적화에 사용) 50
catalog, schema DB catalog, schema 이름  
uniqueConstraints(DDL) 유니크 제약 조건을 지정할 수 있음  

 

SEQUENCE: 데이터베이스의 시퀸스를 이용해서 식별키 생성(ORACLE 등 시퀸스 제공 DB)

@SequenceGenerator가 필요하다

@Entity
@SequenceGenerator(name = “MEMBER_SEQ_GENERATOR",
        sequenceName = “MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
        initialValue = 1,
        allocationSize = 1)
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE,
            generator = "MEMBER_SEQ_GENERATOR")
    private Long id;
}
name 식별자 생성기 이름(필수)
sequenceName DB에 등록되어 있는 시퀸스 이
initialValue DDL 생성 시에만 사용됨, 시퀀스 DDL을 생성할 때 처음 시작하는 수를 지정(Default:1)
allocationSize 시퀀스 한 번 호출에 증가하는 수(성능 최적화에 사용됨)
데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값 을 반드시 1로 설정해야 한다(Defaule: 50)
catalog, schema 데이터베이스 catalog, schema 이름

 

@Index

인덱스를 지정합니다

@Entity
@Table(name = "MEMBER", indexes={
        @Index(name = "idx__name__age", columnList = "name, age", unique = true)
})
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}
name 인덱스 이름
columnList 인덱스를 지정할 컬럼들
unique 중복값 어용 여부(default:false[중복 허용])

 

@Enumerted

자바 enum타입을 매핑할 때 사용한다.

@Enumerated(EnumType.ORDINAL)
private Gender gender;

@Enumerated(EnumType.STRING)
private Gender gender;
Original enum순서를 DB에 저장(default)
STRING enum이름을 DB에 저장

 

@Temporal

날짜 타입을 매핑할 때 사용한다.

    @Temporal(TemporalType.DATE)
    Date regDate;

    @Temporal(TemporalType.TIME)
    Date regTime;

    @Temporal(TemporalType.TIMESTAMP)
    Date regTimestamp;
속성 설명 결과값 예시
DATE 날짜, DB date타입과 매핑 2021-07-27
TIME 시간, DB time타입과 매핑 12:30:50
TIMESTAMP 날짜와 시간 DB timestamp타입과 매핑 2021-07-27 12:30:50

 

@Lob

DB BLOB, CLOB타입과 매핑

  • 필드 타입이 문자열일 경우(CLOB 매핑)
  • 그외 자료형(BLOB 매핑)
    @Lob
    @Column(name="photo", columnDefinition = "BLOB")
    private String photo2;

    @Lob
    @Column(name="photo", columnDefinition = "CLOB")
    private byte[] photo1;

 

@Transient

해당 어노테이션이 명시된 필드는 DB에 저장하지도 조회하지도 않습니다.

  • 객체에 임시로 값을 보관하고 싶을 때 사용한다.

 

@CreationTimestamp

해당 어노테이션이 명시되면 INSERT 쿼리가 발생할 때, 현재 시간을 자동으로 만들어 저장합니다.

    @CreationTimestamp // INSERT 시 자동으로 값을 채워줌
    @Column(name = "created_at")
    private LocalDateTime createdAt = LocalDateTime.now();

 

@UpdateTimeStamp

해당 어노테이션이 명시되면 UPDATE쿼리가 발생할 때, 현재 시간을 자동으로 만들어 저장합니다.

    @UpdateTimestamp // UPDATE 시 자동으로 값을 채워줌
    @Column(name = "updated_at")
    private LocalDateTime updatedAt = LocalDateTime.now();

 

 

 

 

 

출처: https://velog.io/@c65621/JPA-annotation-%EC%A0%95%EB%A6%AC

 

JPA annotation 정리

1.@Entity해당 클래스를 테이블과 매핑한다고 JPA에게 알려줍니다.@Entity가 사용된 클래스를 엔티티 클래스라고 합니다.2.@Table엔티티 클래스에 매핑할 테이블 정보를 지정합니다.@Table 어노테이션을

velog.io

출처: https://yoonbing9.tistory.com/19

 

기본키 매핑 어노테이션 정리 @Id, @GeneratedValue, @SequenceGenerator, @TableGenerator

기본키 매핑은 직접할당과 자동할당 방법으로 나뉜다. @Id 직접할당. 엔티티의 기본키 필드에 값을 직접 넣어 등록한다. @GeneratedValue 자동할당 속성값 설명 대표DBMS strategy = GenerationType.IDENTITY 기

yoonbing9.tistory.com

 

'Spring' 카테고리의 다른 글

[Spring JPA] 단방향, 양방향 연관관계  (0) 2023.04.09
[Spring JPA] 엔티티 설계  (0) 2023.04.08
[SpringBoot] 검증2-Bean Validation  (0) 2023.04.03
[SpringBoot] 검증1-Validation  (0) 2023.03.30
[SpringBoot] 메시지 국제화  (0) 2023.03.28

+ Recent posts