JPA Mapping
2023. 3. 31. 23:28ㆍSpring
728x90
@Entity
- JPA가 관리하는 클래스
- 속성
- @Entity(name = “”)
- JPA에서 사용할 엔티티 이름 지정
- 기본값 : 클래스 이름 그대로 사용
- @Entity(name = “”)
@Table
- 엔티티와 매핑할 테이블 지정
- 속성
- @Table(name = “”)
- 매핑할 이름 지정
- 기본값 : 엔티티 이름
- catalog
- 데이터베이스 catalog 매핑
- schema
- 데이터베이스 schema 매핑
- uniqueConstraints(DDL)
- DDL 생성시에 유니크 제약 조건 생성
- @Table(name = “”)
데이터베이스 스키마 자동 생성
<https://gmlwjd9405.github.io/2019/08/11/entity-mapping.html>
속성값
- create
- 기존 테이블 삭제 후 다시 생성
- create-drop
- create와 동일하나 종료 시점에 데이블 DROP
- update
- 변경 분만 반영
- validate
- 엔티티와 테이블이 정상 매핑되었는지만 확인
- none
- 아무 속성도 사용하지 않음
@Column
- 컬럼 매핑
- 속성
- name
- 객체명과 DB 컬럼명을 다르게 하고 싶은 경우 사용
- insertable
- updatable
- 컬럼을 수정했을 때 DB에 추가할 것인지 여부
- false인 경우 변경이 되어도 DB에 반영되지 않음
- nullable
- not null 제약조건
- unique
- 이름을 랜덤으로 생성
- columnDefinition
- 컬럼 정보를 작성
- length
- 문자 길이 제약 조건
- String 타입에만 사용
- precision
- 숫자가 엄청 큰 경우
- name
@Enumerated
- Enum 객체 사용시 사용
- EnumType.ORDINAL
- enum 순서를 데이터베이스에 저장
- EnumType.String
- enum 이름을 데이터베이스에 저장
@Temporal
- 날짜 Type인 경우 사용
- java.util.Date, java.util.Calendar
- DATE
- 날짜, DB의 date 타입과 매핑
- TIME
- 시간, DB의 time 타입과 매핑
- TIMESTAMP
- 날짜와 시간, DB의 timestamp 타입과 매핑
@Lob
- varchar를 넘어서는 큰 내용을 넣고 싶은 경우 사용
- CLOB
- String, char[], java.sql.CLOB
- BLOB
- byte[], java.sql.BLOB
@Transient
- 특정 필드를 컬럼에 매핑하지 않음
- DB에 관계없이 메모리에서만 사용하고자 하는 경우 사용
- DB에 저장, 조회가 안됨
@ManyToOne
- N : 1 관계
- 속성
- targetEntity
- 관계를 맺을 Entity Class 정의
- cascade
- Entity의 변경에 대해 관계를 맺은 Entity도 변경 전략 결정
- 속성 : CasecadeType에 ALL, PERSIST, MERGE, REMOVE, REFRESH, DETACH 존재
- fetch
- 데이터 읽기 전략
- FetchType.EAGER
- entity의 정보를 미리 읽어오는 것
- FetchType.LAZY
- 실제로 요청하는 순간 가져오는 것
- optional
- false 설정 : 해당 객체에 null 가능
- targetEntity
@ManyToOne(targetEntity = User.class, fetch = FetchType.LAZY)
@JoinColumn(name = "user_pk")
private User user;
참고자료
'Spring' 카테고리의 다른 글
Spring Swagger (0) | 2023.04.03 |
---|---|
Spring Security (0) | 2023.04.03 |
GenerationType (0) | 2023.03.31 |
Spring_Entity, DTO, VO (0) | 2023.03.22 |
Spring_MySQL 연결_gradle (0) | 2023.03.22 |