[JPA] Entity Mapping #3

Harry park·2022년 6월 20일
0

JPA

목록 보기
4/8
post-thumbnail

필드와 컬럼 매핑


@Column

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

Column Property

속성명 기능 Default
name 필드와 매핑할 테이블의 컬럼명 객체의 필드명
nullable
(DDL)
한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다.생성되는 제약조건 이름이 알아보기 힘든 문자로 생성되므로 🔗@Table의 uniqueConstraints 속성을 이용해 name까지 같이 지정하는 방식을 더 많이 쓴다.
columnDefinition
(DDL)
DB 컬럼 정보를 직접 매핑 | 필드의 자바 타입과 방언 정보를 사용해 적절한 컬럼타입을 생성한다. 필드의 자바 타입과 방언 정보를 사용해 적절한 컬럼 타입 생성
length
(DDL)
문자 길이 제약조건 String 타입에만 사용 255
precision,scale
(DDL)
BigDecimal/BigInteger 타입에서 사용
precision은 소수점을 포함한 전체 자리수
scale은 소수점 자리수
precision=19, scale=2

코드 예시

📖 nullable

@Column(nullable = false)
private <String name;

// 생성 DDL
// name varchar(255) not null

📖 unique

@Column(unique = true) 
private String username;
// 생성된 DDL
// alter table TableName
//		add constraint UK_xxx unique (username)

📖 columnDefinition

@Column(columnDefinition = "varchar(100) default 'EMPTY'")
private String desc;

// 생성된 DDL
// desc varchar(100) default 'EMPTY'

📖 length

@Column(length = 4000)
private String contents;
// 생성된 DDL
// data varchar(400)

📖 percision, scale

@Column(precision =10, scale = 2)
private BigDecimal cal;

// 생성된 DDL
// cal numeric(10,2)	H2, PostgreSQL
// cal number(10,2)		Oracle
// cal decimal(10,2)	MySQL

@Column 생략

@Column을 생략하는 경우, 객체 타입이면 (nullable = true) 기본형(primitive)이면 (nullable = false)가 적용된다.

@Enumerated

자바의 Enum을 매핑할 때 사용

기능

EnumType.ORIGINAL : enum 순서를 저장(1,2,3 ...)
EnumType.STRING : enum 이름을 저장(지정된 enum type - ADMIN..)
Default. EnumType.ORIGINAL

@Temporal

날짜 타입을 매핑할 때 사용.(java.util.Date, java.util.Canlendar, LocalDate, LocalDateTime)

기능

TemporalType.DATE : 데이터베이스 date 타입
TemporalType.TIME : 데이터베이스 time 타입
TemporalType.TIMESTAMP : 데이터베이스 timestamp 타입
최신 Hibernate에선 생략해도 된다.(Java8 이상)

@Lob

데이터베이스 BLOB, CLOB 타입과 매핑한다.
@LOB 은 지정할 수 있는 속성이 없다.
매핑하는 필드 타입이 문자면 CLOB 으로 매핑하고, 나머지는 BLOB 으로 매핑한다.

@Transient

@Transient 를 붙이면 해당 필드는 매핑하지 않는다.
DB 저장하지 않고, 조회하지도 않기 때문에 객체에 임시로 값을 보관하고 싶을 때 사용한다.

@Access

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

기능

AccessType.FIELD : 필드에 직접 접근, private도 접근 가능
AccessType.PROPERTY : 프로퍼티 접근, 접근자 getter 사용


참고사이트

velog - purple
velog - 사명기


개인적으로 공부하며 기록한 내용으로, 틀린 내용이 있는 경우 덧글을 달아주시면 감사하겠습니다. 😍

profile
Jr. Backend Engineer

0개의 댓글