Posts [자바 ORM 표준 JPA 프로그래밍-기본편] 필드와 컬럼 매핑
Post
Cancel

[자바 ORM 표준 JPA 프로그래밍-기본편] 필드와 컬럼 매핑

본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다.


요구사항 추가

1)회원은 일반 회원과 관리자로 구분해야 한다.

2)회원 가입일과 수정일이 있어야 한다.

3)회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제 한이 없다.

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
31
32
package hellojpa;

import javax.persistence.*;
import java.util.Date;

@Entity
public class Member {

    @Id
    private Long id;

    @Column(name = "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() { // JPA는 객체를 생성해서 reflection을 활용하여 값을 동적으로 채워주기에 기본 생성자가 필수로 필요하다.

    }
}
  • @Column(name = "name")
    • 객체는 username 으로 쓰고 싶고 DB 필드명은 name으로 하고 싶을때 와래와 같이 설정을 지정해주면 된다.
  • Integer age
    • Integer와 가장 비슷한 숫자 타입이 지정된다.
  • @Enumerated(EnumType.STRING)
    • DB에는 enum 타입이 기본적으로 없기에 String값으로 저장되게 한다.
  • @Temporal(TemporalType.TIMESTAMP)
    • 데이터베이스는 DATE, TIME, TIMESTAMP 세 가지로 구분되서 사용된다.
  • @Lob
    • DB에 varchar를 넘어서는 큰 콘텐츠를 넣고 싶을때 사용한다.

매핑 어노테이션 정리

image

@Column

image

  • insertable, updatable: 해당 컬럼이 insert되거나 update 가능 여부를 지정한다.
  • unique: 제약 조건명을 지정할 수 없기에 잘 사용안한다. 운영측에서 어떤 제약조건인지 알 수 없다.
    • image
    • 그래서 아래와 같이 @Table 어노테이션에 unique제약조건을 거는 경우가 많다.
      1
      2
      3
      4
      5
      
      @Entity
      @Table(uniqueConstraints = )
      public class Member {
      ...
      }
      
  • BigDecimal: 아~주 큰 숫자나 소수점 쓸 때 사용한다.

@Enumerated

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

  • 속성: value (기본 값: EnumType.ORDINAL)
    • EnumType.ORDINAL: enum 순서를 데이터베이스에 저장
      • (주의!!! ORDINAL 사용X)
      • 운영상에서 어떤 값을 나타내는지 혼란이 올 수 있다.
    • EnumType.STRING: enum 이름을 데이터베이스에 저장

@Temporal

  • 날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용한다.
  • 참고: LocalDate, LocalDateTime을 사용할 때는 생략 가능, 지금은 필요 없음(최신 하이버네이트 지원)

image

1
2
3
4
5
6
7
8
9
10
@Enumerated(EnumType.STRING)
private RoleType roleType;

@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;

private Date lastModifiedDate;

private LocalDate testLocalDate;
private LocalDateTime testLocalDateTime;

@Lob

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

  • @Lob에는 지정할 수 있는 속성이 없다.
  • 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑
    • CLOB: String, char[], java.sql.CLOB
    • BLOB: byte[], java.sql. BLOB
This post is licensed under CC BY 4.0 by the author.

[자바 ORM 표준 JPA 프로그래밍-기본편] 데이터베이스 스키마 자동 생성

[에센셜 스크럼] Chapter7 - 추정 및 속도