테이블 자체를 매핑했다면, 테이블 내에 있는 컬럼을 필드와 매핑해주어야 한다.
이를 위해 사용하는 몇가지 어노테이션부터 정렬해보자면,
@Column | 일반적인 데이터베이스의 컬림 명시 |
@Temporal | 자바의 Time, Date, TimeStamp을 매핑한다. (요즘은 LocalDate, LocalDateTime을 사용하기에 잘 쓰지 않는다. . ) |
@Enumrated | enum타입을 쓸 때, 그 값을 어떻게 저장할지 정해준다. |
@Lob | 사이즈가 매우 큰 문자열 저장에 쓰인다. |
@Transient | 해당 자바 변수를 매핑하고 싶지 않을 때 쓴다. |
이렇게가 존재한다.
표에 다 적긴 힘들어서 하나씩 부연설명을 적어야 할 것 같다.
@Column : 기본적인 컬럼 매핑에 사용한다. 즉, 이게 적혀있다면 데이터베이스 테이블의 컬럼이라는 뜻. 소괄호 안에 아래의 요소가 들어간다.
- Name : 매핑할 테이블의 컬럼 이름을 명시해줄 수 있다. (기본값은 필드 명을 그대로 )
- Insertable : insert문이 나갈 때 이 컬럼을 등록할지 말지를 명시한다.
- Updatable : update문이 나갈 때 이 컬럼을 등록할지 말지 명시한다.
- Nullable : 객체를 새로 저장할때, null을 허용할지를 명시한다.
- Unique : 컬럼의 유니크 제약조건을 넣어준다. 문제는 JPA는 제약조건의 이름이 랜덤값이므로 사용하지 않고, 테이블에 @UniqueConstraints 어노테이션을 써서 제약조건명을 따로 넣어 사용한다.
- Length : 문자열 길이의 제한(기본값 = 255)
- columnDefinition : 데이터베이스의 컬럼 정보를 직접 줄 수 있다. (ex. default = ???)
- precision/Scale : 아주 작은 소수점을 쓸 때 사용한다.
@Enumrated : enum타입을 쓸 때, 값을 어떻게 저장시킬지 정한다.
- Ordinal : enum 클래스를 만들어보면, 안에 순서대로 값들이 입력되어있다. Ordinal은 어플리케이션에서 작성된 enum 값의 index를 저장한다.
- 이는 문제가 있다. enum 클래스를 수정하면, 그 index가 바뀔 수 있고, 이를 통해 원래 저장했던 값과 다른 결과를 만들 수 있다.
- String : enum 값을 그대로 문자열로 저장한다.
@Temporal : 요즘은 LocalDate, LocalDateTime을 이용한다.
@Lob : 지정된 속성이 존재하지는 않는다. 매핑 필드 타입이 문자열이면 CLOB, 나머지는 BLOB라고 하는데, 데이터베이스의 종류에 따라 다르게 저장되기도 한다.
@Transient : 데이터베이스에 해당 객체를 매핑시키지 않는 경우에 작성한다.
'스프링 공부 > JPA' 카테고리의 다른 글
[JPA] 9. 객체지향에서 연관관계를 만들어야 하는 이유 (0) | 2022.11.02 |
---|---|
[JPA] 8. 데이터베이스 스키마 자동생성 (0) | 2022.10.20 |
[JPA] 6. 기본키 매핑 (0) | 2022.10.20 |
[JPA] 5. 테이블 자체의 어노테이션에 대하여 (0) | 2022.10.20 |
[JPA] 4. 객체를 데이터베이스와 매핑시키기 - 엔티티 매핑 (0) | 2022.10.20 |