JPA에서 제일 중요하게 봐야 되는 2가지가 있다.
이번 글에서는 맵핑에 관한 Entity Mapping에 대해서 작성하겠다.
목차
- 객체와 테이블 매핑
- 데이터베이스 스키마 자동 생성
- 필드와 컬럼 매핑 -> 다음 글
- 기본 키 매핑 -> 다음 글
@Entity
@Entity가 붙은 클래스는 JPA가 관리한다.
JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수
주의
기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자)
final 클래스, enum, interface, inner 클래스 사용 X
저장할 필드에 final 사용 X
@Entity 속성 정리
@Entity(name="MBR")
name을 MBR로 설정했다. from 절을 보면 MBR이라고 되어 있는 것을 확인할 수 있다.
@Table
엔티티와 매핑할 테이블 지정
속성 | 기능 | 기본값 |
---|---|---|
name | 매핑할 테이블 이름 | 엔티티 이름을 사용 |
catalog | 데이터베이스 catalog 매핑 | |
schema | 데이터베이스 schema 매핑 | |
uniqueConstraints | DDL 생성 시에 유니크 제약 조건 생성 |
JPA는 맵핑 정보만 보면 어떤 쿼리를 만드렁야할지 어떤 테이블인지 다 알 수 있다. 그래서 JPA에서는 아예 애플리케이션 로딩 시점에 DB 테이블을 생성하는 기능도 지원을 한다.
물론 운영에서 사용하며 안된다. 개발 단계나 로컬 pc에서 개발할 때 사용하면 된다.
pom.xml
<property name="hibernate.hbm2ddl.auto" value="create" />
xml에 위에 코드를 추가하면 애플리케이션 실행 시점에 JPA가 테이블을 생성해준다.
옵션 | 설명 |
---|---|
create | 기존 테이블 삭제 후 다시 생성 |
create-drop | create와 같으나 종료 시점에 테이블 Drop |
update | 변경분만 반영(운영 DB에는 사용X) |
validate | 엔티티와 테이블이 정상 매핑되었는지만 확인 |
none | 사용하지 않음 |
장점
보통 개발할 때 테이블을 먼저 만들어놓고 그 다으멩 객체에 돌아가서 개발을 한다. 하지만 JPA는 그럴 필요가 없다. 객체에서 맵핑을 해두면 알아서 테이블을 만들어준다.
이때 데이터베이스 방언을 활용해서 각 데이터베이스에 맞는 적절한 DDL을 생성해준다.
예시
@Entity //jpa가 로딩될 때 인식을 함, JPA가 관리하는 객체가 되고 데이터베이스 테이블과 맵핑을 해서 사용함
public class Member {
@Id //pk가 무엇인지 알려줌, pk 매핑
private Long id;
private String username;
public Member() {
}
// Getter, Setter ...
위의 설정을 한 후 Member Entity를 작성 후 실행하면 데이터베이스에 JPA가 자동으로 테이블을 생성해준다.
제약조건 추가: 회원 이름은 필수, 10자 초과X
@Column(nullable = false, length = 10)
유니크 제약조건 추가
@Table(uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE",columnNames = {"NAME", "AGE"} )})
DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 주지 않는다.