[Spring] 엔티티 매핑

zini9188·2023년 2월 25일
0

Spring

목록 보기
24/33

엔티티와 테이블 간의 매핑

@Entity 어노테이션을 붙여 JPA 관리 대상 엔티티로 지정

@Entity

@Entity(name = "USERS)
@Table(name = "USERS)
public class Member{
	@Id
	private Long memberId;
}
  • @Table은 옵션이지만 @Entity@Id는 필수

  • 테이블의 기본값은 클래스 명이지만, 변경하고 싶다면 name = "원하는클래스명" 으로 변경 가능

    • @Entity (name = ) 엔티티와 테이블 명 모두 변경
    • @Table (name = ) 테이블 명만 변경
  • 파라미터가 없는 기본 생성자는 필수로 추가

  • 클래스 명으로 테이블 명을 사용하는 것을 권장하지만 아래의 경우 테이블 명 변경이 필요

    • 중복 엔티티 클래스가 존재
    • 테이블 명이 클래스 명과 다른 경우

기본키 매핑

@GeneratedValue 에 strategy 애트리뷰트 값을 지정하여 사용

키 생성 전략할당 방법특징
@Id직접 할당애플리케이션에서 직접 할당
휴먼 에러 주의
IDENTITY자동 생성키 생성 방법을 DB에 위임
em.persist()시점에 쿼리 수행
SEQUENCE자동 생성데이터베이스 오브젝트 사용
em.persist() 시점에 키 조회 후 할당
TABLE자동 생성키 생성 전용 테이블 생성
모든 데이터베이스에 적용 가능
성능 안좋음
AUTO자동 생성사용하는 데이터베이스에 따라 자동으로 선택
데이터베이스 변경에 따른 코드 수정 없음
초기, 프로토 타입 개발에 적용

필드와 컬럼 간의 매핑

@Column을 통해 필드와 컬럼을 매핑할 수 있다.

@Column의 속성 값

속성default특징비고
name""컬럼의 이름을 설정생략하면 클래스 필드의 이름으로 생성됨
length255컬럼의 길이를 제한비밀번호와 같이 자리수 제한이 있는 경우 사용
nullabletrue컬럼에 null을 허용할지 여부자바 원시 타입 필드의 경우 false를 설정하는 것이 좋음
updateabletrue컬럼 데이터를 수정할 수 있는지 여부고유한 값인 경우 수정 불가능하게 만드는 것이 좋음
uniquefalse해당 컬럼이 고유한 값인지 여부ID와 같이 고유한 값인 경우 고유한 값으로 지정하는 것이 좋음

@Enumerated의 타입

  • ORDINAL : enum의 순서를 나타내는 숫자를 테이블에 저장

  • STRING : enum의 이름을 테이블에 저장

EnumType.String을 사용하는 것을 권장하는데, EnumType.ORDINAL의 경우 기존 정의되어 있는 enum 사이에, 새로운 enum이 추가되면 정의되어 있던 순서들이 일치하지 않는 문제가 발생하기 때문

@Temporal

java.util.Date, java.util.Calendar 타입으로의 매핑을 위해사용

LocalDate, LocalDateTime 타입의 경우 생략 가능

엔티티 클래스의 예외

엔티티 클래스에서 발생하는 예외는 모두 API 계층까지 전파되므로 별도의 ExceptionHandler를 구성한 클래스나 advice를 통해 예외를 catch 할 수 있다.

profile
백엔드를 지망하는 개발자

0개의 댓글