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 |
---|
댓글