본문 바로가기
Spring/jpa, db

[JPA] 어노테이션 정리

by 미소여우 2022. 5. 7.
728x90

엔티티 관련 어노테이션

JPA에선 클래스를 엔티티로 선언해줄 때 어노테이션들을 달아주어 디비와 매핑 시켜주는데, 다음과 같은 어노테이션들이 있다.

  • @Entity: 클래스를 엔티티에 선언, 클래스 위에 선언
  • @Table: 엔티티와 매핑할 테이블 지정, 클래스 위에 선언
  • @Id: 테이블 기본키 지정, 필드에 지정
  • @GeneratedValue: 키 값 생성 시 전량 지정, @Id와 한 세트
  • @Column: 필드와 컬럼 매핑 시 사용
  • @Lob: BLOB, CLOB 타입 매핑, 필드에 사용
  • @CreationTimestamp: insert 시 시간 자동 저장
  • @UpdatedTimestamp: update 시 시간 자동 저장
  • @Enumerated: enum 타입 매핑
  • @Transient: 해당 필드를 데이터베이스 매핑 때 무시
  • @Temporal: 날짜 타입 매핑
  • @CreateDate: 엔티티가 생성되어 저장될 때 시간 자동 저장
  • @LastModifiedDate: 조회한 엔티티의 값을 변경할 때 시간 자동 저장
LOB은 사이즈가 큰 데이터를 관리할 때 쓰는 타입이다.
CLOB: 사이즈가 큰 데이터를 외부 파일로 저장하기 위한 타입. 문자형 대용량 파일을 저장할 때 씀
BLOB: 바이너리 데이터를 DB 외부에 저장하기 위한 타입. 이미지, 사운드, 비디오 같은 멀티미디어 데이터를 다룰 때 씀

@Column 속성

해당 어노테이션을 활용하여, 테이블에 매핑되는 컬럼의 이름, 문자열의 최대 저장 길이 같은 제약 조건을 추가할 수 있다.

속성 설명 기본값
name 필드와 매핑할 컬럼의 이름 지정 객체의 필드 이름
unique(DDL) 유니크 제약 조건 설정  
insertable insert 가능 여부 true
updateable update 가능 여부 true
length String 타입의 문자 길이 설정 255
nullable(DDL) null 값 허용 여부
false면 DDL 생성 시 not null 제약 조건 추가
 
columnDefinition 데이터베이스 컬럼 정보 직접 설정
ex)
@Column(columnDefinition = "varchar(5) default '10' not null")
 
precision, scale(DDL) BigDecimal(BigInteger) 타입에서 사용.
precision은 소수점을 포함한 전체 자리
scale은 소수점 자리수
Double과 float 타입에는 적용되지 않음
 

 

@GeneratedValue

엔티티 클래스는 기본키를 가져야 하는데, @Id 어노테이션을 지정한 필드에 어떤 식으로 기본키값을 줄건지 전략을 정해줄 수 있다.

생성 전략 설명
GenerationType.AUTO JPA 구현체가 자동으로 생성 전략 결정
GenerationType.IDENTITY 기본키 생성을 데이터베이스에 위임
- MySql은 AUTO_INCREMENT로 만들어 준다.
GenerationType.SEQUENCE 데이터베이스 시퀀스 오브젝트를 이용하여 기본키 생성
@SequenceGenerator를 사용하여 시퀀스 등록 필요
GenerationType.TABLE 키 생성용 테이블 사용, @TableGenerator 필요

전략이란 의미는 기본키를 생성하는 방법이라고 보면 되는데, MySQL은 AUTO_INCREMENT를 이용해 INSERT 시, 자동으로 기본키 값을 증가시키며, 오라클은 Sequence를 사용하여 초기값, 증가값, 최댓값, 최솟값을 지정할 수 있다.

728x90

'Spring > jpa, db' 카테고리의 다른 글

[JPA] Spring Data JPA에서 바로 DTO를 받아보자  (0) 2022.05.12

댓글