- 테스트 요구사항
- 회원은 일반 회원과 관리자로 구분해야 한다.
- 회원 가입일과 수정일이 있어야 한다.
- 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제한이 없다.
- @Column
- @Enumerated
- 다바 enum 타입을 매핑할 때 사용
- 주의! ORDINAL 사용 X
- STRING TYPE 권장
- 배열 순서가 변경될 수도 있음
- 주의! ORDINAL 사용 X
- @Transient
- 필드 매핑 X
- 데이터베이스에 저장X, 조회X
- 주로 메모리상에만 임시로 어떤 값을 보관하고 싶을 때 사용
-
@Transient private Integer temp;
-
- 기본 키 매핑 어노테이션
- @Id
- @GeneratedValue
-
@Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id;
- 기본 키 매핑 방법(전략)
- 직접 할당 : @Id만 사용
- 자동 생성 : @GeneratedValue
- IDENTITY 전략 : 데이터베이스에 위힘, MYSQL
- 기본 키 생성을 데이터베이스에 위임
- 주로 MySQL, PostgreSQL, SQL Server에서 사용
- ex. MySQL의 AUTO_INCREMENT
- JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행
- 그래서 모아서 INSERT를 하지 못한다.
- 엔티티를 조회해서 1차 캐시에 저장하기 위해서
- Persist를 호출한 시점에 INSERT 쿼리가 실행된다.(commit을 하지 않아도 실행)
- 의문 ? Select 쿼리가 없다
- JDBC드라이버에 Insert 하는 시점에 ID 값을 알 수 있다.
- JDBC드라이버에서 리턴 받은 값을 영속성 컨텍스트에 넣어준다.
- AUTO_INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후에 ID 값을 알 수 있음
- SEQUENCE 전략 : 데이터베이스 시퀀스 오브젝트 사용, Oracle
- @SequenceGenerator 필요
- 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트
- 의문? 자꾸 네트워크를 왔다 갔다해야하는데, Insert를 한번 실행하는게 낫지 않나?
- 성능 증가 가능 -> allocationSize 설정, default value = 50
-
- Next Call할 때 한 번에 allocationSize만큼 메모리에 저장한다.(DB에는 미리 증가)
- 여러 웹서버가 있어도 동시성 이슈 없이 해결 가능
- 각 서버별로 allocationSize를 할당 받아서 이슈가 없음
- ex. 1서버 50, 2서버 100, 3서버 150, ,...
- 10,000개 씩 설정하면 좋긴하지만 웹서버 종료 시 구멍이 생겨서 날라갑니다. 구멍이 생겨도 상관이 없지만, 그만큼 낭비가 됩니다. 그래서 50이 적당하다고 합니다.
- TABLE 전략 : 키 생성용 테이블 사용, 모든 DB에서 사용
- @TableGenerator 필요
- 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략
- 장점 : 모든 데이터베이스에 적용 가능
- 단점 : 성능
- AUTO 전략 : 방언에 따라 자동 지정, 기본값
- IDENTITY 전략 : 데이터베이스에 위힘, MYSQL
- 권장하는 식별자 전략
- 기본 키 제약 조건 : null 아님, 유일, 변하면 안된다.
- 미래까지 이 조건을 만족하는 자연키는 찾기 어렵다. 대리키(대체키)를 사용하자.
- ex. 주민등록번호도 기본 키로 적절하지 않다.
- 권장 : Long형 + 개체키 + 키 생성전량 사용
출처
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
'JPA 프로그래밍' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 연관관계 매핑 기초 - 단방향 연관관계 ( 1/3 ) (0) | 2021.07.05 |
---|---|
[자바 ORM 표준 JPA 프로그래밍] 실전 예제1 - 요구사항 분석과 기본 매핑 ( 3/3 ) (0) | 2021.07.04 |
[자바 ORM 표준 JPA 프로그래밍] 엔티티 매핑 - 객체와 테이블 매핑, DB 스키마 자동 생성( 1/3 ) (0) | 2021.06.29 |
[자바 ORM 표준 JPA 프로그래밍] 영속성 관리 (0) | 2021.06.26 |
[자바 ORM 표준 JPA 프로그래밍] Hello World 프로젝트 ( 2/2 ) (0) | 2021.06.13 |