inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

기본값 타입

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

해결된 질문

1078

류재준

작성한 질문수 21

10

안녕하세요 강사님

스프링 부트 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

감사합니다.

java JPA

답변 3

7

김영한

안녕하세요. 재준님

딱 생각하신 것이 맞습니다. 정말 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처럼.. 수많은 질문이 ㅎㅎ;

실무 조언 관련 질문입니다.

0

39

1

H2데이터베이스 파일 생성

0

48

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

49

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

46

1

JPQL 메소드와 락

0

49

1

Delivery @OneToOne

0

55

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

85

2

UnsupportedOperationException 발생

0

80

3

H2 Database 연결이 안됩니다.

0

87

2

연관관계 매핑 질문드립니다.

0

79

2

h2데이터베이스 실행오류

0

103

2

persistence.xml

0

101

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

76

1

영속성 컨텍스트

0

61

1

JPA 프록시

0

87

1

Native Query와 MyBatis

0

62

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

81

1

임베디드 타입 예시 코드 관련 질문

0

110

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

89

3

인텔리제이 패키지 커서 단축키 질문

0

104

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

134

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

67

1

임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.

0

95

1

데이터베이스가 초기화되는 것 같아요

1

173

2