JPA를 사용하는 데 있어 가장 중요한 일은 엔티티와 테이블을 정확히 매핑하는 것이다. JPA는 다양한 매핑 어노테이션을 지원하는데 크게 4가지로 분류할 수 있다.
- 객체와 테이블 매핑 : @Entity, @Table
- 기본 키 매핑 : @Id
- 필드와 컬럼 매핑 : @Column
- 연관관계 매핑 : @ManyToOne, @JoinColumn
이번 포스트에서는 1, 2, 3번에 대해 알아보자.
📂 @Entity
JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다. @Entity가 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라고 부른다.
속성은 다음과 같다.
속성 | 기능 | 기본값 |
name | JPA에서 사용할 엔티티 이름을 지정한다. 보통은 기본값인 클래스 이름을 사용한다. | 설정하지 않으면 클래스 이름을 그대로 사용한다. |
@Entity 적용 시 주의사항은 다음과 같다.
- 기본 생성자는 필수다(파라미터가 없는 public or protected 생성자).
- final 클래스, enum, interface, inner 클래스에는 사용할 수 없다.
- 저장할 필드에 final을 사용하면 안된다.
JPA가 엔티티 객체를 생성할 때 기본 생성자를 사용하기 때문에 이 생성자는 반드시 있어야 한다. 자바는 생성자가 없으면 기본 생성자를 자동으로 만들기 때문에 생략이 가능하다.
public Member() {} // 직접 만든 기본 생성자
// 임의로 만든 생성자
public Member(String name) {
this.name = name;
}
만약 위와 같이 생성자를 하나 이상 만들면 자바는 기본 생성자를 자동으로 만들지 않기 때문에, 이때는 기본 생성자를 직접 만들어야 한다.
📂 @Table
@Table은 엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용한다.
속성은 다음과 같다.
속성 | 기능 | 기본값 |
name | 매핑할 테이블 이름 | 엔티티 이름을 사용한다. |
catalog | catalog 기능이 있는 데이터베이스에서 catalog를 매핑한다. | |
schema | schema 기능이 있는 데이터베이스에서 schema를 매핑한다. | |
uniqueConstraints (DDL) |
DDL 생성 시에 유니크 제약조건을 만든다. 2개 이상의 복합 유니크 제약조건도 만들 수 있다. 참고로 이 기능은 스키마 자동 생성 기능을 사용해서 DDL을 만들 때만 사용된다. |
이들을 이용해 유니크 제약 조건이 추가된 예제 코드를 보면 다음과 같다.
- 유니크 제약조건이 추가된 엔티티 클래스
@Entity(name="Member")
@Table(name="MEMBER", uniqueConstraints = {@UniqueConstraint(
name = "NAME_AGE_UNIQUE",
columnNames = {"NAME", "AGE"} )})
public class Member {
@Id
@Column(name = "id")
private String id;
@Column(name = "name")
private String username;
private Integer age;
...
}
참고
자바 ORM 표준 JPA 프로그래밍(김영한 저)
'JPA' 카테고리의 다른 글
[JPA] 준영속 (0) | 2023.04.27 |
---|---|
[JPA] 플러시 (0) | 2023.04.25 |
[JPA] 영속성 컨텍스트의 특징 (1) | 2023.04.17 |
[JPA] 영속성 관리 - 엔티티 매니저/팩토리, 영속성 컨텍스트, 엔티티 생명주기 (0) | 2023.04.15 |
[JPA] 엔티티 매니저 설정 + 트랜잭션 관리 + 비즈니스 로직 (2) | 2023.04.14 |