본 내용은 유튜브 나무소리님의 강의 내용을 정리한 내용입니다.
JPA 3-1강 Entity Mapping(1)
@Entity
- 도메인 객체를 관계형 데이터베이스 테이블로 맵핑할 때 @Entity 어노테이션을 사용합니다.
- @Entity 어노테이션만 선언했을 때 테이블 이름은 클래스 이름이 되고 대/소문자 치환은 일어나지 않습니다.
- 대부분 RDBMS는 대/소문자를 가리지 않으므로 기본 JPA 작명규칙이 문제를 발생하지는 않습니다.
- @Table 어노테이션을 사용해서 테이블 이름을 명시적으로 표기할 수 있습니다.
주의사항
- 빈 생성자(default constructor)가 있어야합니다.
- final 필드를 적용하지 않습니다. (JPA에서 객체에 데이터를 담을 때 setter를 이용)
@Entity
public class User {
...
String userId;
String userName;
String email;
...
}
@Entity
public class Seller extends User {
...
}
@Entity
public class Bidder extends User {
...
}
@Table
- 관습적인 테이블 설계 방법에서 테이블 이름은 대문자에 "_"를 많이 사용합니다.
- @Table 어노테이션은 스키마를 지정하거나 테이블 이름을 구체적으로 명시합니다.
- 특정 RDBMS는 스키마 지정을 테이블 이름에 포함할 수 있기에 "SA.USER" 로 스키마 지정이 가능합니다.
- @Table(name = "USER", catalog = "CATALOG")로 카탈로그 지정이 가능합니다.
@Entity
@Table(name = "USER", schema = "SA")
public class User {
...
String userId;
String userName;
String email;
...
}
@Entity
public class Seller extends User {
...
}
@Entity
public class Bidder extends User {
...
}
@Table 옵션 | |
name | 매핑하나 테이블 이름 지정(기본 : 클래스명) |
catalog | 데이터베이스 catalog 매핑(catalog 기능이 있는 경우) |
schema | 데이터베이스 schema 매핑(schema 기능이 있는 경우) |
uniqueConstraints | DDL 생성에서 unique 제약 조건 생성 (스키마 자동 생성 기능시) |
스키마 자동 생성 옵션 | |
create | 테이블 Drop + Create |
create-drop | 테이블 Create후 프로그램 종료시 Drop |
update | 테이블 수정 |
validate | 영속 객체와 테이블 매핑 확인 |
none | 사용하지 않음 |
// persistence.xml
...
// 스키마 자동 생성 옵션 create 설정
<property name="hibernate.hbm2ddl.auto" value="create"/>
...
- 데이터베이스에 테이블이 존재하지 않는 경우 자동으로 생성을 해주고 존재하는 경우 테이블을 Drop하고 생성합니다.