티스토리 뷰
엔티티 매핑
- 객체와 테이블 매핑: @Entity, @Table
- 필드와 컬럼 매핑: @Column
- 기본 키 매핑: @Id
- 연관관계 매핑: @ManyToOne, @JoinColumn
객체와 테이블 매핑
@Entity가 붙은 클래스는 JPA가 관리하고 엔티티라고 합니다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수입니다. 기본 생성자도 public 이나 protected로 반드시 생성하고, final class, enum, interface, inner class에는 사용할 수 없습니다. @Table로 디비 테이블에 저장될 이름을 따로 설정할 수 있습니다.
@Entity
@Table(name = "ORDERS")
public class Order extends BaseEntity{
@Id
private Long id;
}
필드와 컬럼 매핑
객체의 필드와 DB 테이블 매핑시 사용합니다. 필드와 컬럼을 매핑하는 몇 가지 속성이 있는데 알아보겠습니다.
@Column
- name: 필드와 매핑할 테이블의 컬럼 이름
- insertable, updatable: 컬럼을 수정했을 때 디비에 변경을 할지 말지 설정
- nullable: Not Null 제약 조건이 걸린다.
- unique: 컬럼 하나에 유니크 조건을 걸 때 사용. 잘 사용하지 않고 uniqueConstarint를 더 많이 사용
- length: 길이를 조절. String 타입에만 사용
@Enumerated
- enum 타입을 매핑할 때 사용. ORDINARY를 사용하면 안되고 STRING 사용 !
- EnumType.ORDINARY를 사용하면 1, 2, 3과 같이 순서대로 저장되는데, 중간에 하나가 사라진다면...?
@Lob
- Lob: 데이터 베이스 BLOB, CLOB 타입과 매핑, 문자는 CLOB, 나머지는 BLOB
@Transient
- 메모리 상에서만 임시로 값을 보관하고 싶을 때 사용
- 필드 매핑 X, 디비 저장 조회 X
@Entity
@Table(name = "ORDERS")
public class Order extends BaseEntity{
@Id @GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
}
기본 키 매핑
기본 키를 매핑하는 어노테이션을 알아보겠습니다.
@Id
- 직접 아이디로 사용하겠다고 세팅해주는 것.
- PK 조건을 걸어준다고 생각하면 된다.
@GeneratedValue
- 자동으로 키를 생성하기 원할 때 사용하면 된다.
- 옵션으로 IDENTITY, SEQUENCE, TABLE, AUTO가 있는데 관계형 데이터베이스를 사용하는 경우 보통 SEQUENCE, AUTO를 많이 사용한다. 디폴트는 AUTO.
권장하는 식별자(PK) 전략
- 기본 키 제약 조건: NULL이 아니여야하고, 유일해야하고, 변하면 안된다 -> Not null, unique, immutable
- 미래까지 이 조건을 만족하는 키는 찾기 어렵기 때문에 대체키를 사용하는 것이 좋다.
- 비즈니스 환경은 언젠가 변한다고 생각.
- 예를 들어 주민등록번호도 기본 키로 적절하지 않다.
- 권장: Long Type + 대체키(sequence or UUID) + 키 생성전략 사용
- auto increment나 sequence 전략 사용 -> Long 타입으로 사용하자.
@Entity
@Table(name = "ORDERS")
public class Order extends BaseEntity{
@Id @GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
}
'Spring' 카테고리의 다른 글
[Spring] Web Layer (스프링 웹 계층) (0) | 2022.05.25 |
---|---|
[Spring] JPA 연관관계 매핑 (0) | 2022.05.09 |
[Spring] JPA Entity Manager 영속성 컨텍스트 (0) | 2022.04.26 |
[Spring] JUnit4 -> JUnit5 에서의 테스트 @Test, @RunWith, @SpringBootTest (0) | 2022.04.12 |
[Spring] 서블릿 필터, 스프링 인터셉터 (Filter/Interceptor) (0) | 2022.04.05 |
- Total
- Today
- Yesterday
- 환경 별 로깅 전략 분리
- 3차 데모데이
- 스프링MVC
- 스프링 부트
- 스프링 Logback
- 피움 6주차 회고
- 알림기능개선기
- Spring
- 런칭 페스티벌
- 우테코
- 파이썬
- 5주차 회고
- ZNS
- java
- ZNS SSD
- 팀프로젝트
- 알림개선기
- 우테코 회고
- 2차 데모데이
- 8주차 회고
- 피움
- 스프링 프레임워크
- 프로젝트
- CI/CD
- 백준
- jpa
- 회고
- dm-zoned
- 네트워크
- dm-zoned 코드분석
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |