• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

기본값 타입에 대해서 강사님이 사용하시는 방법이 궁금 합니다.

20.12.27 18:06 작성 조회수 621

9

안녕하세요 강사님

스프링 부트 JPA 활용 부분에 설계부분을 보고 있는대요

Entity 맵핑에 사용하는 기본 값 타입이 갑자기 궁금해서 질문을 드리게 되었습니다.

(여기에 질문을 남기는게 적절하다고 생각이 되었습니다^^)

Entity Class를 생성하면 결국 DB에 테이블과 매칭이 되는데

이때 아래 2가지 타입 중에서 강사님이 사용하시는 방법이 궁금합니다.

primitive 타입

@Column

private long count;

Wrapper 타입

@Column

private Long count;

이 경우 신규로 테이블을 생성할 경우와

운영 중 테이블에 컬럼을 추가할 경우가 발생할 것 같은데요

강사님이 실무에 자주 사용하는 방법이 궁금하네요^^;

테이블에 not null 제약 조건이 걸리면 long을 사용해도 될 것 같은데

null 제약 조건이 없다면 long을 사용 시 문제가 발생할 것 같아서요

데이터가 어떤 값을 가져야 하는지 먼저 생각하는 게

가장 중요하다고 생각 되긴 하는데

강사님이 활용하시는 방법이 궁금해서 질문 드립니다.

(어떻게 보면 너무 당연한 질문 같아서;; 괜히 질문 드렸나 하는 마음도 있네요;;)

관련해서 구글링을 해보았는데 저랑 비슷하게 생각하시는 글이 있어서 질문 드리게 되었습니다.

https://chanwookpark.github.io/jpa/2016/10/13/jpa-note/#%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8-%ED%83%80%EC%9E%85-%EC%82%AC%EC%9A%A9-%EC%8B%9C-primitive-%ED%83%80%EC%9E%85%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%A0-%EA%B2%83%EC%9D%B8%EA%B0%80-wrapper-%ED%83%80%EC%9E%85%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%A0-%EA%B2%83%EC%9D%B8%EA%B0%80

감사합니다.

답변 3

·

답변을 작성해보세요.

6

안녕하세요. 재준님

딱 생각하신 것이 맞습니다. 정말 not null 제약조건이 필수로 걸리는 경우에는 primitive를 사용하고, null을 허용해야 하면 Wrapper를 사용합니다^^

심지어 primitive 타입에 @Column을 생략하면, JPA가 테이블을 생성할 때 도 not null 제약조건을 자동으로 추가해줍니다^^

JPA 책 147p에 관련 내용이 있네요 ㅎㅎ

======JPA 책 147p==========

@Column 생략

@Column을 생략하게 되면 어떻게 될까? 대부분 @Column 속성의 기본값이 적용되는데, 자바 기본 타입일 때는 nullable 속성에 예외가 있다. 우선 코드를 보자.

int data1; //@Column 생략, 자바 기본 타입 data1 integer not null //생성된 DDL

Integer data2; //@Column 생략, 객체 타입 data2integer //생성된DDL

@Column

int data3; //@Column 사용, 자바 기본 타입 data3integer //생성된DDL

int data1 같은 자바 기본 타입에는 null 값을 입력할 수 없다. Integer data2처럼 객체 타입일 때 만 null 값이 허용된다. 따라서 자바 기본 타입인 int data1을 DDL로 생성할 때는 not null 제약조 건을 추가하는 것이 안전하다.

JPA는 이런 상황을 고려해서 DDL 생성 기능을 사용할 때 int data1 같은 기본 타입에는 not null 제약조건을 추가한다. 반면에 Integer data2처럼 객체 타입이면 null이 입력될 수 있으므로 not null 제약조건을 설정하지 않는다. 그런데 int data3처럼 @Column을 사용하면 @Column은 nullable = true가 기본값이므로 not null 제약조건을 설정하지 않는다. 따라서 자바 기본 타입에 @Column을 사용하면 nullable = false로 지정하는 것이 안전하다.

================

감사합니다.

4

ㅎㅎ 너무 궁금하면 질문해주세요.

그러면 다른 분들께도 도움이 되니까요.

감사합니다^^

1

류재준님의 프로필

류재준

질문자

2020.12.28

안녕하세요 강사님

자세히 답변 주셔서 감사합니다!

답변 주신 부분 많은 도움이 되었습니다.

처음 JPA 기본 강의 들으면서 질문하려고 했었는데;

(이건 너무 당연한 것 같고;; 이런 것도 물어봐도 될까 하다가;; 너무 궁금해서 여쭤보았습니다.)

*JPA 책을 E-BOOK이랑 서적으로 다 가지고 있는데;; 확인을 안 해 봤네요;;

강의 들으면서 JPA 책도 같이 읽어 보면서 학습하겠습니다.

감사합니다.

============================================================================

스프링 쪽 강의 질의응답 부분을 보니.. 많이 힘드실 것 같습니다.

N+1처럼.. 수많은 질문이 ㅎㅎ;