엔티티와 테이블 간의 매핑
@Entity
어노테이션을 붙여 JPA 관리 대상 엔티티로 지정
@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
을 통해 필드와 컬럼을 매핑할 수 있다.
속성 | default | 특징 | 비고 |
---|---|---|---|
name | "" | 컬럼의 이름을 설정 | 생략하면 클래스 필드의 이름으로 생성됨 |
length | 255 | 컬럼의 길이를 제한 | 비밀번호와 같이 자리수 제한이 있는 경우 사용 |
nullable | true | 컬럼에 null을 허용할지 여부 | 자바 원시 타입 필드의 경우 false를 설정하는 것이 좋음 |
updateable | true | 컬럼 데이터를 수정할 수 있는지 여부 | 고유한 값인 경우 수정 불가능하게 만드는 것이 좋음 |
unique | false | 해당 컬럼이 고유한 값인지 여부 | ID와 같이 고유한 값인 경우 고유한 값으로 지정하는 것이 좋음 |
ORDINAL : enum의 순서를 나타내는 숫자를 테이블에 저장
STRING : enum의 이름을 테이블에 저장
EnumType.String
을 사용하는 것을 권장하는데, EnumType.ORDINAL
의 경우 기존 정의되어 있는 enum 사이에, 새로운 enum이 추가되면 정의되어 있던 순서들이 일치하지 않는 문제가 발생하기 때문
java.util.Date
, java.util.Calendar
타입으로의 매핑을 위해사용
LocalDate
, LocalDateTime
타입의 경우 생략 가능
엔티티 클래스의 예외
엔티티 클래스에서 발생하는 예외는 모두 API 계층까지 전파되므로 별도의 ExceptionHandler
를 구성한 클래스나 advice를 통해 예외를 catch 할 수 있다.