엔티티 설계와 클래스 구성
엔티티(Entity) 설계하는 것과 엔티티를 사용하기 위한 클래스 구성하는 방법에 대해서 알아보겠습니다.
엔티티 설계
- Spring Data JPA를 사용하면 데이터베이스에 테이블을 생성하기 위해 직접 쿼리를 작성할 필요가 없다.
- JPA에서는 엔티티는 데이터베이스의 테이블에 대응하는 클래스이다.
- 엔티티에는 데이터베이스에 쓰일 테이블과 칼럼을 정의한다.
- 엔티티에 어노테이션을 사용하면 테이블 간의 연관관계를 정의할 수 있다.
엔티티 클래스 내용
클래스 생성 후에 application.properties에 정의한 spring.jpa.hibernate.ddl-auto 값을 create 같은 테이블을 생성하는 옵션으로 생성하면 쿼리문을 작성하지 않아도 데이터베이스에 테이블이 자동으로 만들어진다.
@Getter
@Setter
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "product")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long number;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private Integer price;
@Column(nullable = false)
private Integer stock;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
엔티티 관련 기본 어노테이션
@Entity
- 해당 클래스가 엔티티임을 명시하기 위한 어노테이션이다.
- 클래스 자체는 테이블과 일대일로 매칭되며, 해당 클래스의 인스턴스는 매핑되는 테이블에서 하나의 레코드를 의미한다.
@Table
- 테이블과 매핑되므로 특별한 경우가 아니면 @Table 어노테이션이 필요하지 않다.
- @Table 어노테이션을 사용할 때는 클래스의 이름과 테이블의 이름을 다르게 지정하는 경우이다.
- @Table 어노테이션을 명시하지 않으면 클래스와 테이블의 이름이 동일하다는 의미이며, 다른 이름을 쓰려면 @Table(name = 값) 형태로 데이터베이스의 테이블 명을 명시해야한다.
@Id
- 엔티티 클래스의 필드는 테이블의 칼럼과 매핑된다.
- @Id 어노테이션이 선언된 필드는 테이블의 기본값 역할로 사용된다.
- 모든 엔티티는 @Id 어노테이션이 필요하다.
@GeneratedValue
- 일반적으로 @Id 어노테이션과 함께 사용된다.
- 해당 필드의 값을 어떤 방식으로 자동으로 생성할지 결정할 때 사용된다.
- GeneratedValue를 사용하지 않는 방식(직접 할당)
- 애플리케이션에서 자체적으로 고유한 기본값을 생성할 경우 사용하는 방식이다.
- 내부에 정해진 규칙에 의해 기본값을 생성하고 식별자로 사용한다.
- AUTO
- @GeneratedValue 의 기본 설정값
- 기본값을 사용하는 데이터베이스에 맞게 자동 생성된다.
- IDENTITY
- 기본값 생성을 데이터베이스에 위임하는 방식이다.
- 데이터베이스의 AUTO_INCREMENT 를 사용해 기본값을 생성한다.
- SEQUENCE
- @SequenceGenerator 어노테이션으로 식별자 생성기를 설정하고 이를 통해 값을 자동 주입받는다.
- SequenceGenerator를 정의할 때는 name, sequenceName, allocationSize를 활용한다.
- TABLE
- 어떤 DBMS를 사용하더라도 동일하게 동작하기를 원할 경우 사용한다.
- 식별자로 사용할 숫자의 보관 테이블을 별도로 생성해서 엔티티를 생성할 때마다 값을 갱신하며 사용한다.
- @TableGenerator 어노테이션으로 테이블 정보를 설정한다.
@Column
- 엔티티 클래스의 필드는 자동으로 테이블 칼럼으로 매핑된다.
- 별다른 설정을 하지 않을 예정이라면 이 어노테이션을 명시하지 않아도 된다.
- name : 데이터베이스의 칼럼명을 설정하는 속성이다. 명시하지 않으면 필드명으로 지정된다.
- nullable : 레코드를 생성할 때 칼럼 값에 null 처리가 가능한지를 명시하는 속성이다.
- length : 데이터베이스에 저장하는 데이터의 최대 길이를 설정한다.
- unique : 해당 칼럼을 유니크로 설정한다.
@Transient
- 엔티티 클래스에는 선언되어 있는 필드지만, 데이터베이스에서 필요 없을 경우 이 어노테이션을 통해 데이터베이스에서 이용하지 않게 할 수 있다.
반응형
'Book > 스프링부트 핵심가이드' 카테고리의 다른 글
JPA Repository 인터페이스 생성과 사용 방법 (0) | 2023.11.02 |
---|---|
스프링부트 프로젝트 생성(feat. MariaDB) (0) | 2023.11.02 |
Spring Data JPA와 Entity의 설명 (1) | 2023.11.01 |
댓글