@Entity는 자바 클래스에 붙여서 JPA에게 테이블과 매핑을 하겠다고 알리는 어노테이션입니다. @Entity가 붙은 자바 클래스는 엔티티라고 부르게 됩니다.
@Entity(name = "")과 같은 식으로 name이라는 속성을 붙일 수 있는데요. name 속성은 JPA에서 사용할 엔티티의 이름을 지정하는 속성입니다. 따로 지정하지 않는 경우 클래스의 이름을 그대로 엔티티 이름으로 사용하게 됩니다.
@Entity를 사용할 때의 주의사항은 다음과 같습니다.
final, enum, interface, inner 클래스에 지정할 수 없다.final을 붙이면 안된다.@Table은 엔티티와 매핑할 테이블을 지정합니다. name 속성을 따로 명시하지 않을 경우 엔티티의 이름을 매핑할 테이블 이름으로 사용합니다.
다음은 @Table에서 사용될 수 있는 속성들입니다.
| 속성 | 설명 |
|---|---|
| name | 엔티티와 매핑할 테이블 이름. 따로 지정하지 않으면 엔티티 이름을 사용 |
| catalog | catalog 매핑 (catalog 기능을 지원하는 DB에서만) |
| schema | schema 매핑 (schema 기능을 지원하는 DB에서만) |
| uniqueConstraints | DDL 시 유니크 제약조건 정의 |
JPA는 @Entity, @Table (+추후 설명할 기본키, 컬럼, 연관 관계 매핑 정보)를 보고 데이터베이스 스키마이터베이스 스키마를 자동으로 생성하는 기능을 제공하고 있습니다.
application.yml 기준으로 spring.jpa.hibernate.ddl-auto 옵션을 통해 자동 생성 방식을 지정할 수 있습니다.
| 옵션 | 설명 |
|---|---|
| none | 스키마 자동 생성을 비활성화 |
| validate | 애플리케이션 시작시 엔티티와 스키마가 일치하는 지 확인. 변경 X |
| update | 엔티티 매핑 정보를 바탕으로 DDL을 수행하여 현재 매핑 상태에 맞게 업데이트 |
| create | 애플리케이션 시작 시 기존 스키마를 모두 삭제(drop)하고 스키마를 새로 생성 |
| create-drop | 애플리케이션 시작 시 스키마를 새로 생성하고, 애플리케이션 종료시 스키마를 삭제 |
@Table의 uniqueConstraints 속성을 이용하면 테이블에 유니크 제약조건을 걸 수 있습니다.
@Entity
@Table(
name = 'users_table',
uniqueConstraints = {
@UniqueConstraint([name = "제약조건 이름"], columnNames = { "컬럼1", "컬럼2" })
}
)
public class User {...}
위 옵션을 설정하면 DDL이 수행될 때 다음과 같은 유니크 제약 조건문이 수행됩니다.
CREATE TABLE 테이블이름(
컬럼1,
컬럼2,
[CONSTRAINT 제약조건이름] UNIQUE (컬럼1, 컬럼2)
);
@Column(unique = true)를 이용해서 컬럼에 유니크 제약조건을 걸 수 있습니다.하지만 이 방법은 단일 컬럼에 대해서만 유니크 제약조건을 걸 수 있기 떄문에 복합 유니크 제약조건을 걸고 싶다면
uniqueConstraints를 이용해야합니다. 당연히uniqueConstraints를 사용해서 단일 유니크 제약조건을 걸 수도 있습니다.