Entity Mapping
@Entity
메인 객체를 관계형 데이터베이스 테이블로 맵핑할 때 @Entity 어노테이션을 사용
@Entity 어노테이션만 선언했을 때 테이블 이름은 클래스 이름이 되고 대/소문자 치환은 일어나지 않는다.
대부분은 RDBMS는, 대/소문자를 가리지 않으므로 기본 JPA 작명규칙이 문제를 발생하지는 않는다.
@Table 어노테이션을 사용해서 테이블 이름을 명시적으로 표기할 수 있다.
@Table
관습적인 테이블 설계 방법에서 테이블 이름은 대문자에 "” 를 많이 사용.
@Table 어노테이션은 스키마를 지정하거나 테이블 이름을 구체적으로 명시한다.
특정 RDBMS는 스키마 지정을 테이블 이름에 포함할 수 있기에 "SA.USER” 로 스키마 지정이 가능
@Table("name= USER” , catalog= "CATALOG”)로 카탈로그 지정이 가능하다.
@Table 속성 | |
---|---|
name | 매핑 할 테이블의 이름 |
catalog | 데이터베이스 카탈로그 매핑 |
schema | 데이터베이스 스키마 매핑 |
uniqueContrains | DDL 생성에서 unique 제약조건 생성 |
uniqueContrains 기능은 스키마가 자동 생성 되어 있어야한다.
스키마 자동생성 옵션 방법
persistence.xml 에 아래 property 설정
<property name="hibernate.hbm2ddl.auto" value="create" />
<!-- valuer 값 : create, create-drop, update, validate, none-->
위값을 추가하면 데이터베이스에 테이블이 없어도 자동으로 프로그램이 실행될때 테이블을 생성해 준다.
접근방식
JPA 에서 객체 접근방식은 크게 '필드 접근방식'과 '프로퍼티 접근방식'으로 나뉜다. @Id 어노테이션의 위치에 따라 접근방식이 달라지게된다.
@Entity
public class Category {
@Id
private Long id;
}
위 코드와 같이 필드(field)위에 @Id 어노테이션이 붙으면 필드 접근방식이 된다.
반대로 getter 혹은 setter 에 @Id가 붙으면 프로퍼티 접근방식이 된다. 통상적으로 필드 접근 방식을 사용한다.
Primary Key Mapping
기본키(Primary Key)는 애플리케이션과 데이터베이스 양쪽에서 생성이 가능하다.
애플리케이션에서 생성하는 기본키:
데이터베이스에서 생성하는 기본키:
일반적으로 데이터베이스에서 기본키를 생성한다. 그 이유는 데이터베이스가 기본키를 생성하고 관리하면 애플리케이션에서는 기본키 생성에 대해 걱정할 필요가 없고, 데이터베이스가 중복된 값을 방지하고 일관성을 유지할 수 있기 때문이다.
@GeneratedValue
데이터베이스가 기본키를 자동으로 생성하는 경우, JPA에서는
@GeneratedValue 어노테이션을 사용한다.
@GeneratedValue 어노테이션의 속성으로 기본키 생성 전략을 정할 수 있다.
@GeneratedValue 속성 | |
---|---|
identity | 기본키 생성 처리를 데이터베이스에 위임 |
sequence | 시퀀스를 이용한 기본키 생성 |
table | 별도의 기본키 테이블을 이용해 기본키 생성 |
auto | 데이터베이스에 따라 기본키 생성 전략 선택(default) |