해결된 질문
작성
·
886
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
안녕하세요 강사님
자세히 답변 주셔서 감사합니다!
답변 주신 부분 많은 도움이 되었습니다.
처음 JPA 기본 강의 들으면서 질문하려고 했었는데;
(이건 너무 당연한 것 같고;; 이런 것도 물어봐도 될까 하다가;; 너무 궁금해서 여쭤보았습니다.)
*JPA 책을 E-BOOK이랑 서적으로 다 가지고 있는데;; 확인을 안 해 봤네요;;
강의 들으면서 JPA 책도 같이 읽어 보면서 학습하겠습니다.
감사합니다.
============================================================================
스프링 쪽 강의 질의응답 부분을 보니.. 많이 힘드실 것 같습니다.
N+1처럼.. 수많은 질문이 ㅎㅎ;