본문 바로가기
Spring/JPA

Entity-Table 매핑 - 필드 매핑(@Column)

by YellowCow 2023. 2. 23.

JPA에서는 Entity의 속성과 테이블의 컬럼의 매핑을 위해

다양한 옵션(애너테이션)을 지원하고 있다

 

JPA에서 지원하는 옵션은 다음과 같다

 

이번 페이지에서는 컬럼에 대한 옵션을 살펴보겠다

@Column

  • name - 컬럼이름
  • insertable/updatable - 등록/수정 가능 여부
  • unique - unique 제약조건
  • columnDefinition - 컬럼에 대한 DDL을 직접 주는 옵션 ex) varchar(100) default ‘EMPTY'
  • length - 문자열 길이
  • precision - 소수점을 포함한 전체 자릿 수
  • scale - 소수 자리수

 

위 옵션들은 아래와 같이 Entity의 속성위에 @Column 애너테이션을 붙여서 설정할 수 있다

@Entity
class Report{
    @Id
    private Long Id
    
    @Column(name="TTL", unique="false", length= 50)
    private String title;
    
    @Column(update="false", length= 50)
    private String report;
}

 

다만, 컬럼에 제약조건을 설정하는 unique옵션의 경우,

제약조건이름이 "UK_kjngvkajnsdfkljasldkj123124"와 같이 지정되어

디버깅이나 유지보수에 어려움이 있을 수 있다

 

그래서 컬럼에 unique 제약조건을 설정하기 보다는

아래와 같이 테이블에 제약조건을 설정하면 제약조건이름을 지정할 수 있으므로

@Table 애너테이션의 uniqueContstraints옵션을 이용하여 테이블에 제약조건을 지정해주는 게 좋다

@Entity
@Table(
	uniqueConstraints={
            @UniqueConstraint(
                name = "report_reported_date_unique",
                columnNames = {"reported_date"}
            )
	}
)
class Report{
    @Id
    private Long Id
    
    @Column(name="TTL", unique="false", length= 50)
    private String title;
    
    @Column(update="false", length= 50)
    private String report;
    
    private LocalDateTime reportedDate;
}

 

댓글