Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Android
- http
- QueryDSL
- 스프링 핵심 원리
- AOP
- java
- springdatajpa
- Exception
- 자바
- 알고리즘
- kotlin
- Thymeleaf
- Proxy
- transaction
- jpa
- 김영한
- spring
- SpringBoot
- JDBC
- db
- Spring Boot
- Greedy
- 그리디
- 스프링
- 스프링 핵심 기능
- pointcut
- Servlet
- JPQL
- 인프런
- 백준
Archives
- Today
- Total
개발자되기 프로젝트
필드와 컬럼 매핑 본문
1. 요구사항
- 회원은 일반 회원과 관리자로 구분되어야 한다.
- 회원 가입일과 수정일이 있어야 한다.
- 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제한이 없다.
2. Mapping Annotation 정리
@Annotation | 설명 |
@Column | 컬럼 매핑 |
@Temporal | 날짜 타입 매핑(DATE, TIME, TIMESTAMP) : DB는 구분해서씀 |
@Enumerated | enum타입 매핑(ORDINAL, STRING) : 항상 STRING으로 |
@Lob | BLOB, CLOB 매핑, varchar를 넘어서는 큰 컨텐츠 |
@Transient | 특정 필드를 컬럼에 매핑하기 않고 필드로 씀. |
- @Enumerated
- DB에는 ENUM타입이 없음.
- @Enumerated(EnumType.STRING) --> String 타입 이넘
@Enumerated(EnumType.STRING) private RoleType roleType;
- @Temporal
- 자바의 DateTime안에는 날짜, 시간다있음
- DB는 Date, TIme, TimeStamp로 구분해서 씀. 따라서 TimeStamp 줘야함.
public enum TemporalType {
DATE,
TIME,
TIMESTAMP;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
- @Lob : db의 varchar를 넘어서는 큰 컨텐츠를 사용하기위해 @Lob쓰면됨.
@Lob
private String description;
- Member class
@Entity
public class Member {
@Id
private Long id;
@Column(name = "name") //DB 컬럼 명은 name;
private String userName;
private Integer age;
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Lob
private String description;
public Member() {
}
}
3. @Column
속성 | 설명 | 기본값 |
name | 필드와 매핑할 테이블의 컬럼 이름 | 객체 필드 이름 |
insertable, updatable | 등록, 변경 가능 여부(기본이 true) | TRUE |
nullable(DDL) | null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙는다. | TRUE |
unique(DDL) | @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다. --> 잘 안씀. 필드 명이 FIELD_SLDFKJSDL이상하게 나옴. -->대신 @Table(uniqueConstraints = )를 사용함 |
|
columnDefinition (DDL) | 데이터베이스 컬럼 정보를 직접 줄 수 있다. ex) varchar(100) default ‘EMPTY' | 필드의 자바 타입과 방언 정보 사용 |
length(DDL) | 문자 길이 제약조건, String 타입에만 사용한다. | 255 |
precision, scale(DDL) | BigDecimal 타입에서 사용한다(BigInteger도 사용할 수 있다). precision은 소수점을 포함한 전체 자 릿수를, scale은 소수의 자릿수 다. 참고로 double, float 타입에는 적용되지 않는다. 아주 큰 숫자나 정 밀한 소수를 다루어야 할 때만 사용한다. | precision=19, scale=2 |
4. @Enumerated
- ORDINAL 사용하지 말자.
속성 | 설명 | 기본값 |
value | • EnumType.ORDINAL: enum의 순서를 데이터베이스에 저장 • EnumType.STRING: enum 이름을 데이터베이스에 저장 |
EnumType.ORDINAL |
- ORDINAL 사용하는 경우
- ENUM 타입을 USER(0), ADMIN(1) 에서 맨 앞에 GUEST가 추가되면..?
- GUEST(0), USER(1), ADMIN(2)으로 변경되어 문제가 발생할 가능성이 있다. - String타입으로 사용하는 경우 --> String타입으로 들어가기 때문에 enum type이 추가되어도 문제 없다.
5. @Temporal
- 날짜타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용.
- LocalDate(년,월), LocalDateTime(년,월,일)을 사용할 때는 Hibernate가 지원하여 불필요
- LocalDate --> date
- LocalDateTime --> timestamp
속성 | 설명 | 기본값 |
value | • TemporalType.DATE: 날짜, 데이터베이스 date 타입과 매핑 (예: 2013–10–11) • TemporalType.TIME: 시간, 데이터베이스 time 타입과 매핑 (예: 11:11:11) • TemporalType.TIMESTAMP: 날짜와 시간, 데이터베이 스 timestamp 타입과 매핑 (예: 2013–10–11 11:11:11) |
6. @Lob
- 지정할 속성 없음.
- 매핑하는 필드 타입이 문자면 -> CLOB 매핑
나머지는 BLOB 매핑 - CLOB: String, char[] --> java.sql.CLOB
- BLOB: byte[] --> java.sql. BLOB
7. @Transient
- 해당 필드는 매핑하지 않음
- 데이터 베이스에 저장안함, 따라서 조회도 안함.
- 메모리 상에만 임시로 값을 보관하고 싶을 때 사용
- @Transient
private Integer temp;
'인프런 > [인프런] 자바ORM 표준 JPA 프로그래밍' 카테고리의 다른 글
예제 : 요구사항 분석과 기본 매핑. (0) | 2021.08.09 |
---|---|
기본 키(PK) 매핑 (0) | 2021.08.09 |
데이터베이스 스키마 자동 생성, DDL 주의사항 (0) | 2021.08.09 |
객체와 테이블 매핑 (0) | 2021.08.08 |
플러시, 준영속 상태, 정리 (0) | 2021.08.08 |
Comments