[JPA] 기본 어노테이션 정리

Dawon Seo·2022년 8월 28일
0

JPA

목록 보기
3/5
post-thumbnail

1. @Entity

  • Entity는 데이터베이스의 테이블과 일대일로 매칭되는 객체 단위
  • @Entity JPA를 사용해 테이블과 매핑할 클래스에 붙이는 어노테이션
  • @Entity 어노테이션을 클래스에 선언하면 그 클래스는 JPA가 관리

주의사항

  • 해당 클래스에 기본 생성자가 꼭 필요
  • final, enum, interface에서는 사용 불가
  • 필드를 final로 선언 불가

속성

  • name: JPA에서 사용할 엔티티 이름을 지정, default는 클래스 이름

Member.java

// MemberA라는 테이블이 생성됨
@Entity(name = "MemberA")
public class Member {
	...
}

2. @Table

  • Entity와 매핑할 테이블을 지정
  • 생략하면 매핑한 Entity 이름을 테이블명으로 사용

속성

  • name: 매핑할 테이블 이름, 기본값은 Entity 이름
  • catalog: catalog 기능이 있는 DB에서 catalog 매핑
  • schema: schema 기능이 있는 DB에서 schema 매핑
  • uniqueConstraints: DDL 생성시 유니크 제약조건 생성

Member.java

// MemberB 테이블이 생성
@Entity
@Table(name = "MemberB")
public class Member {
	...
}

3. @Id

  • 기본키로 지정하는 어노테이션

Member.java

@Entity
public class Member {
	...
    @Id
    private Long id;
    ...
}

기본키 매핑에 대해서는 따로 정리하도록 하겠다!

4. @Column

  • 객체 필드를 테이블 컬럼과 매핑
  • 필드에 속성을 지정할 때 사용

속성

  • name: 필드명을 지정, default는 객체의 필드 이름
  • nullable: null값 허용 여부를 설정, default는 true
  • insertable: 엔티티 저장 시의 필드값 저장 여부, default는 true
  • updateable: 엔티티 수정 시 필드값 수정 여부, default는 true
  • table: 하나의 엔티티를 두 개 이상의 테이블에 매핑할 때 사용
  • unique: 해당 컬럼에 유니크 제약 조건을 설정, dafault는 false
  • length: 문자 길이의 제약 조건을 설정, String 타입일 때 사용, default는 255
  • columnDefinition: 테이블 컬럼의 속성을 직접 설정
  • precision, scale: BigInteger, BigDecimal 타입에서 사용하며 각각 소수점 포함 자릿수, 소수의 자릿수를 의미, default는 각각 0

Member.java

@Entity
public class Member {
	...
    // 컬럼명을 username으로, null값 저장 불가능하게 설정
    @Column(name="username", nullabe=false)
    private String name;
    
    // unique 제약 조건 부여, 문자 길이 제약 500으로 설정
    @Column(unique=true, length=500)
    private Stirng address;
    ...
}

5. @Enumerated

  • 자바 enum 타입을 매핑할 때 사용

속성

  • EnumType.ORDINAL: Enum에 정의된 순서가 저장
  • EnumType.STRING: STRING 타입으로 저장, 안정성의 이유로 권장

RoleType.java

public enum RoleType {
	USER, ADMIN
}

Member.java

@Entity
public class Member {
	...
    @Enumerated(EnumType.STRING)
    private RoleType roleType;
    ...
}

5. 날짜 데이터

  • 과거에 @Temporal 사용했으나 현재는 사용하지 않음
  • LocalDate와 LocalDateTime 사용

Member.java

@Entity
public class Member {
	...
    private LocalDate testLocalDate;
    private LocalDateTime testLocalDateTime;
}

6. Lob

  • Large Object의 줄임말로, 대용량 데이터 지정

Member.java

@Entity
public class Member {
	...
    
    @Lob
    private String description;
    
    ...
}

7. @Transient

  • 해당 필드를 매핑하지 않을 때 사용
  • 사용 시 테이블의 컬럼에서 누락

Member.java

@Entity
public class Member {
	...
    
    // 해당 필드 매핑되지 않음
    @Transient
    private String temp;
    
    ...
}

0개의 댓글