본문 바로가기
JPA

4-2장. 필드, 컬럼 매핑

by ZIAHO 2025. 11. 28.

📁 @Column

객체 필드를 테이블 컬럼에 매핑한다.

@Column(name = "name", nullable = false, length = 10)
private String username;

속성

속성 기능 기본값
name 필드와 매핑할 테이블의 컬럼 이름 객체의 필드 이름
nullable(DDL) null 값의 허용 여부 설정
false 설정 시 DDL 생성 시 not null 제약조건
true
unique(DDL) 한 컬럼에 유니크 제약조건  
columnDefinition(DDL) 데이터베이스 컬럼 정보를 직접 지정 필드 타입과 방언 정보로 자동 생성
length(DDL) 문자 길이 제약조건, String 타입에만 사용 255
precision, scale(DDL) BigDecimal 타입에서 사용
precision: 소수점 포함 전체 자릿수
scale: 소수 자릿수
precision=19
scale=2

📁 @Enumerated

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

@Enumerated(EnumType.STRING)
private RoleType roleType;

속성

속성 기능 기본
value EnumType.ORDINAL: enum 순서를 저장
EnumType.STRING: enum 이름을 저장
EnumType.ORDINAL

주의사항

반드시 EnumType.STRING 사용

  • ORDINAL은 enum 순서가 바뀌면 데이터 정합성이 깨짐
  • STRING을 사용하면 enum 이름이 DB에 저장되어 안전함
// 사용 금지
@Enumerated(EnumType.ORDINAL)

// 반드시 이렇게 사용 권장
@Enumerated(EnumType.STRING)

📁 @Temporal

날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용한다.

@Temporal(TemporalType.TIMESTAMP)
private Date timestamp;

속성

속성 기능 기본값
value TemporalType.DATE: 날짜, DB date 타입
TemporalType.TIME: 시간, DB time 타입
TemporalType.TIMESTAMP: 날짜와 시간, DB timestamp 타입
필수 지정

Java 8 이상

LocalDate, LocalDateTime 사용 시 @Temporal 생략 가능

private LocalDate date;          // DATE
private LocalTime time;          // TIME  
private LocalDateTime dateTime;  // TIMESTAMP

📁 @Lob

데이터베이스 BLOB, CLOB 타입과 매핑한다.

@Lob
private String content;  // CLOB

@Lob
private byte[] image;    // BLOB

매핑 규칙

필드 타입 DB타입
String, char[], java.sql.CLOB CLOB
byte[], java.sql.BLOB BLOB

📁 @Transient

필드를 데이터베이스에 매핑하지 않는다.

@Transient
private Integer temp;  // DB 저장/조회 안 됨

용도: 임시 데이터 보관용


📁 @Access

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

@Access(AccessType.FIELD)    // 필드 직접 접근
@Access(AccessType.PROPERTY) // getter 사용

접근 타입

타입 설명
AccessType.FIELD 필드에 직접 접근 (private도 가능)
AccessType.PROPERTY getter를 사용해서 접근

기본값

@Id의 위치로 자동 결정

  • 필드에 @Id → FIELD 접근
  • getter에 @Id → PROPERTY 접근

📁 정리

어노테이션 용도 핵심 속성 주의사항
@Column 컬럼 매핑 name, nullable, length nullable, length 설정 권장
@Enumerated Enum 매핑 value 반드시 STRING 사용
@Temporal 날짜 매핑 value Java 8은 생략 가능
@Lob 대용량 데이터 없음 타입에 따라 CLOB/BLOB 자동
@Transient 매핑 제외 없음 임시 데이터용
@Access 접근 방 value @Id 위치로 자동 결정

'JPA' 카테고리의 다른 글

6장. 다양한 연관관계 매핑  (0) 2025.12.04
5장. 연관관계 매핑 기초  (0) 2025.12.02
4-1장. 엔티티 매핑  (0) 2025.11.28
3장. 영속성 관리  (0) 2025.11.24
2장. JPA 시작  (0) 2025.11.24