[JPA] 테이블 매핑 - @Entity, @Table

Bam·2025년 5월 15일
0

Spring

목록 보기
52/73
post-thumbnail

@Entity

@Entity는 자바 클래스에 붙여서 JPA에게 테이블과 매핑을 하겠다고 알리는 어노테이션입니다. @Entity가 붙은 자바 클래스는 엔티티라고 부르게 됩니다.

@Entity(name = "")과 같은 식으로 name이라는 속성을 붙일 수 있는데요. name 속성은 JPA에서 사용할 엔티티의 이름을 지정하는 속성입니다. 따로 지정하지 않는 경우 클래스의 이름을 그대로 엔티티 이름으로 사용하게 됩니다.

@Entity를 사용할 때의 주의사항은 다음과 같습니다.

  • 기본 생성자가 필수로 와야한다.
  • final, enum, interface, inner 클래스에 지정할 수 없다.
  • 저장할 필드에 final을 붙이면 안된다.

@Table

@Table은 엔티티와 매핑할 테이블을 지정합니다. name 속성을 따로 명시하지 않을 경우 엔티티의 이름을 매핑할 테이블 이름으로 사용합니다.

다음은 @Table에서 사용될 수 있는 속성들입니다.

속성설명
name엔티티와 매핑할 테이블 이름. 따로 지정하지 않으면 엔티티 이름을 사용
catalogcatalog 매핑 (catalog 기능을 지원하는 DB에서만)
schemaschema 매핑 (schema 기능을 지원하는 DB에서만)
uniqueConstraintsDDL 시 유니크 제약조건 정의

스키마 자동 생성 기능

JPA@Entity, @Table (+추후 설명할 기본키, 컬럼, 연관 관계 매핑 정보)를 보고 데이터베이스 스키마이터베이스 스키마를 자동으로 생성하는 기능을 제공하고 있습니다.

application.yml 기준으로 spring.jpa.hibernate.ddl-auto 옵션을 통해 자동 생성 방식을 지정할 수 있습니다.

옵션설명
none스키마 자동 생성을 비활성화
validate애플리케이션 시작시 엔티티와 스키마가 일치하는 지 확인. 변경 X
update엔티티 매핑 정보를 바탕으로 DDL을 수행하여 현재 매핑 상태에 맞게 업데이트
create애플리케이션 시작 시 기존 스키마를 모두 삭제(drop)하고 스키마를 새로 생성
create-drop애플리케이션 시작 시 스키마를 새로 생성하고, 애플리케이션 종료시 스키마를 삭제

테이블 유니크 제약조건

@TableuniqueConstraints 속성을 이용하면 테이블에 유니크 제약조건을 걸 수 있습니다.

@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를 사용해서 단일 유니크 제약조건을 걸 수도 있습니다.

0개의 댓글