엔티티 매핑
미리 설계한 요구사항에 맞게 객체를 설계하고, 관계형 데이터베이스를 설계했다면 우리는 이 둘을 매핑시켜줘야 한다.
하지만 JPA의 특성 덕분에 우리는 객체 위주로 설계하고 이를 매핑시켜주면 된다.
조건에 맞게 엔티티를 매핑시켜주기 위해서는 어떤 개념들이 필요할까
엔티티와 테이블 매핑
@Entity ?
@Entity 어노테이션이 붙은 클래스는 애플리케이션 실행 시 자동으로 JPA 가 관리하고 이를 엔티티라 부른다.
즉 JPA 를 사용해서 테이블과 매핑될 클래스는 반드시 선언 전 @Entity 어노테이션이 필수이다.
이 때 엔티티 이름을 지정할 수 있는데, @Entity(name = " ") 옵션을 주면 된다. 없다면 클래스 이름을 기본값으로 사용한다.
@Table ?
@Table 어노테이션은 해당 엔티티와 매핑할 테이블을 지정한다.
이때 역시 @Table(name = "") 옵션으로 데이터베이스 테이블 이름을 지정할 수 있다. 없다면 엔티티 이름을 기본값으로 사용한다.
이 외에도 다양한 옵션이 있으니 따로 찾아보길 권장한다.
JPA 는 애플리케이션이 실행될 때마다 데이터베이스 스키마 자동 생성에 대한 제약조건을 걸 수 있다. 설정파일에서 create, update, validate 등 다앙햔 옵션을 줄 수 있다. 하지만 운영서버에서는 반드시 validate, none 설정을 강요한다.
필드와 컬럼 매핑
@Column ?
@Column 어노테이션이 붙은 필드 값은 따로 옵션을 지정할 수 있다.
@Column(name = "") 과 같이 필드 값에 대한 데이터베이스 컬럼 값 이름을 지정할 수 있다. 보통 객체에서는 id 와 같은 단순한 단어를 쓰지만 데이터베이스에서는 MEMBER_ID 와 같은 자세한 정보를 기입하기 때문에 이름을 지정하는 것이 좋다.
컬럼 명을 붙이는 형식은 회사마다 다르기 때문에 회사 룰을 따르는 것이 좋다.
그 외, nullable, unique 와 같은 중요한 속성들이 있다. 다 외우긴 힘들고 필요할 때마다 찾아보는게 좋을 거 같다.
@Enumerated ?
@Enumerated 어노테이션은 Enum 클래스 값을 사용하기 위한 어노테이션이다.
매우 간단하지만, 중요한 속성이 있다. Enum 값을 순서 값인 0,1,2 와 같은 숫자 값으로 들어가는 경우와, 문자열로 들어가는 경우 두가지 옵션이 있다. 중간에 Enum 값을 추가하거나 삭제할 때 자동으로 업데이트 해주지 않기 때문에 반드시 문자열 속성을 사용해야한다.
기본 값이 숫자 값인 ORIDINAL 이기 때문에 EnumType.STRING 옵션을 추가해줘야 한다.
@기본 키 매핑 ?
대부분이 알고 있듯이, 데이터베이스 하나의 스키마는 하나의 기본키를 반드시 가져야한다.
기본키가 될 수 있는 조건이 있는데 숙지하고 있지 않다면 꼭 찾아보는걸 권장한다.
JPA 는 기본 키는 데이터베이스와 매핑할 때 다양한 전략이 있다.
어떤 데이터베이스를 사용하냐에 따라, 그리고 취향에 따라 IDENTITY, SEQUENCE. TABLE 등 다양하게 사용할 수 있다.
이에 대한 자세한 내용은 지금은 이르다고 생각하기 때문에 후에 다루겠다.
이번 실습은 직접 할당하는 경우이기 때문에 직접 할당하는 방법만 다루겠다.
@Id 어노테이션을 통해 해당 필드 값이 기본키 임을 명시해주어야 한다.
@GeneratedValue 어노테이션을 통해 자동으로 값이 증가하며 설정될 수 있게 해준다.
데이터베이스는 해당 필드 값을 기본 키로 지정한 후, 두 스키마를 조인해 조회할 때 이 기본 키를 사용한다.
'개인 공부 > Spring' 카테고리의 다른 글
[Spring] @Transactional 파해치기 (0) | 2022.11.08 |
---|---|
[Spring] JDBC 에서 Transaction 관리하는 법 (0) | 2022.11.08 |
[Spring] #8 JPA 동작 원리 (0) | 2022.04.16 |
[Spring] #7 JPA의 필요성 (0) | 2022.04.15 |
[Spring] #6 스프링 빈 등록 (0) | 2022.01.19 |