inflearn logo
강의

講義

知識共有

Java ORM標準JPAプログラミング - 基本編

デフォルト値の型

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

解決済みの質問

1078

nateen72481907

投稿した質問数 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

yh

안녕하세요. 재준님

딱 생각하신 것이 맞습니다. 정말 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

yh

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

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

감사합니다^^

1

nateen72481907

안녕하세요 강사님

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

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

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

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

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

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

감사합니다.

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

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

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

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

28

2

inheritance startegy 선택시 고려사항

0

22

1

Entity 동등성 비교

0

21

1

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

0

47

1

H2데이터베이스 파일 생성

0

56

2

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

0

53

2

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

0

55

1

JPQL 메소드와 락

0

55

1

Delivery @OneToOne

0

60

1

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

0

94

2

UnsupportedOperationException 발생

0

86

3

H2 Database 연결이 안됩니다.

0

95

2

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

0

85

2

h2데이터베이스 실행오류

0

108

2

persistence.xml

0

108

2

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

0

80

1

영속성 컨텍스트

0

66

1

JPA 프록시

0

97

1

Native Query와 MyBatis

0

70

1

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

0

87

1

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

0

115

3

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

0

95

3

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

0

108

2

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

0

145

1