Zero to Hero
article thumbnail
Published 2021. 5. 15. 10:40
JPA Study 01 Programming

 

책을 읽고 배운 내용을 정리한다.

 

GenerationType.IDENTITY

- 엔티티가 영속 상태가 되려면 식별자가 반드시 필요하다.

- 그런데 이 생성 전략은 엔티티가 데이터베이스에 저장이 되어야 식별자가 생긴다.

- 그래서 em.persist()를 직접 호출하거나 내부에서 호출하는 즉시 삽입 SQL 작업이 수행된다.

- 즉 트랜잭션을 지원하는 쓰기 지연이 동작하지 않는다.

- 생각해보면 당연한 게 영속 상태에 있으려면 식별자가 있어야 하는데 데이터베이스에 삽입하기 전에는 식별자가 존재하지 않는다.

- 그러니깐 식별자를 만들어주기 위해서 삽입 SQL이 지연되지 않고 바로 수행되어 식별자를 얻은 엔티티가 영속 상태가 되는 것 같다.

 

대리 키를 권장한다.

- PK에는 대리 키를 권장한다.

- 대리 키는 비즈니스 적으로 의미가 없는 그냥 생성하는 키를 의미한다. AUTO_INCREMENT가 대표적이다.

- PK는 절대로 변하면 안 된다. 그런데 그 데이터가 변하지 않으리라는 보장을 그 누구도 할 수 없다.

- 주민등록번호도 언젠간 바뀔 수 있고, 우편번호도 최근 5자리로 바뀌었다.

- 그렇기 때문에 일관적으로 대리 키를 사용해서 JPA를 사용하는 것을 권장한다.

 

@Column(nullable =...)

- 기본적으로 사용해도 되고 사용하지 않아도 작동은 하지만 변수 타입에 따라 다르다.

- primitive 타입의 경우는 변수에 null을 담을 수 없다.

- 그런데 이 어노테이션을 사용하면 default로 nullable=true라는 설정이 들어가게 되고 문제가 생길 수 있다.

- 반면에 Wrapper 클래스의 경우 null 값을 할당할 수 있기 때문에 특별히 문제가 발생하지 않는다.

- 그러므로 Wrapper 클래스를 사용하거나, 스펙에 따라서 primitive 타입을 사용해야 하는 경우는 반드시 nullable=false를 선언해야 한다.

 

@Transient

- 매핑하지 않는 필드

- 데이터베이스에 저장하지 않고 조회하지도 않지만 객체에는 값을 할당할 수 있다.

- 특정 용도로 어떤 값을 보관하고 싶을 때 사용한다.

'Programming' 카테고리의 다른 글

JPA Study 03  (0) 2021.05.16
JPA Study 02  (0) 2021.05.15
DB 예약어(MySQL, MariaDB)  (0) 2021.05.14
Spring Study 04  (0) 2021.05.05
Spring Study 03  (0) 2021.05.05
profile

Zero to Hero

@Doljae

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!