Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

필드와 컬럼 매핑 본문

인프런/[인프런] 자바ORM 표준 JPA 프로그래밍

필드와 컬럼 매핑

Seung__ 2021. 8. 9. 20:20

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;
Comments