1. SpringBoot JPA - Mapping Annotation
- Object - [TableMapping]
- @Entity
- Class에 선언하면 Class는 JPA가 관리함
- DB의 Table과 Class(VO, DTO)와 Mapping하면 반드시 @Entity를 붙여줘야함
- @Entity가 붙은 Class에 제약사항이 필요함
- Field에 final, enum, interface, class를 사용할 수 없음
- Constructor중 Basic Constructor가 반드시 필요함
- @Entity의 속성?
- name : Entity name을 지정함
- Default value로 Class name을 그대로 사용함
- @Table
- Mapping할 Table을 지정함
- @Table의 속성?
- name : Mapping할 Table의 name을 지정함
- catalog : DB의 catalog를 Mapping함
- schema : DB의 Schema와 Mapping함
- uniqueConstraint : DDL Query를 작성할 때 제약 조건을 생성함
- Field - [ColumnMapping]
- @Column
- Object Field와 DB Table Column을 Mapping함
- @Column의 속성?
- name : Mapping할 Table의 Column name을 지정함
- insertable : Entity save시 선언된 Field도 같이 Save함
- updateable : Entity update시 Field를 함께 update함
- table : 지정한 Field를 다른 Table에 Mapping할 수 있도록 함
- nullable : 제약조건을 걸 때 사용함
- column Definition : DB Column Info를 직접적으로 지정할 때 사용함
- length : varchar의 길이를 조정함 → default value로 255가 입력됨
- precsion, scale : BigInteger, BigDecimal Type에서 사용함 → 각각 소수점 포함 자리수, 소수의 자리수를 의미함
- BasicKey Mapping
- @Id
- JAVA가 Object를 관리할 때 식별할 Default Key를 지정함
- JoinMapping
- @ManyToOne
- 다른 Table을 참조할 때 N:1 관계를 형성 시켜줌
- 다(Many)가 현재 Table이고 일(One)이 상대 Table임
- @JoinColumn
- 외래키를 Mapping할 때 사용함
- name 속성은 Mapping할 외래키 name을 지정함
- JoinMapping종류?
- @OneToMany (1:M)
- @OneToOne (1:1)
- @ManyToOne (N:1)
- @ManyToMany (N:M)
- @GeneratedValue(strategy = GenerationType.?)
- 기본키 Mapping 전략을 IDENTITY로 설정함
- 기본키 Mapping 전략 4가지
- IDENTITY
- 기본키 생성을 DB에 위임하는 전략임
- id값을 null로 하면 DB가 알아서 auto_increment(sequence) 해줌
- SEQUENCE
- DB Sequence는 유일한 값을 순서대로 생성하는 특별한 DB Object를 말함
- Table마다 Sequence Object를 따로 관리하고 싶으면 @SequenceGenerator에 sequenceName속성을 추가해줌
- @SequenceGenerator 필요함
- @SequenceGenerator?
- name : 식별자 생성기 이름임 → Default Value : 필수
- sequenceName : DB에 등록되어 있는 Sequence name → Default Value : hibernate_sequence
- initialValue : DDLㅅㅇ성 시에만 사용됨, Sequence DDL을 생성할 때 처음 “1” 시작하는 수를 지정함 → Default Value : 1
- allocationSize : Sequence 한 번 call에 증가하는 수(성능 최적화에 사용됨), DB Sequence 값이 하나씩 증가하도록 설정되어 있으면 이 값을 반드시 “1”로 설정해야함 → Default value : 50
- catalog, schema : DB catalog, schema name
- TABLE
- Key 생성 전용 Table을 하나 만들어서 DB Sequence를 흉내내는 전략임
- @TableGenerator 필요함
- [특징]
- 장점 → 모든 DB에 적용가능
- 단점 → 최적화 되어있지 않은 Table을 직접 사용하기 때문에 성능상의 이슈가 있음
- 운영 Server에서는 사용하기에 적합하지 않음
- @TableGenerotr 속성?
- name : 식별자 생성기 이름 → Default Value : 필수
- table : 키 생성 Table name → Default Value : hibernate_sequences
- pkColumnName : Sequence Column Name → Default Value : sequence_name
- valueColumnNa : Sequence value column name → Default Value : next_val
- pkColumnValue : 키로 사용할 값 이름 → Default Value : Entity name
- initialValue : 초기값, 마지막으로 생성된 값이 기준임 → Default Value : 0
- allocationSize : Sequence 한 번 호출에 증가하는 수 (성능 최적화에 사용) → Default Value : 50
- catalog, schema : DB catalog, schema name
- uniqueConstraints(DDL) : Unique 제약 조건을 지정할 수 있음
- AUTO
- 기본 설정 값임
- 기본키 제약 조건?
- 권장하는 식별자 구성 전략?
- (Long형)+(대체키)+(적절한 키 생성 전략)사용함
- Long Type
- 대체키 사용 : Random value, 유휴 ID등 비즈니스와 관계없는 값 사용함
- AUTO_INCREMENT or Sequence Object 사용함
- @ColumnDefault(”’user’”)
- @CreationTimestamp
2. SpringBoot JPA
- hibernate - ddl-auto
- hibernate - naming - pysical-strategy
- hibernate - use-new-id-generator-mapping
- show-sql
- hibernate.format_sql