
간단하게 REST API를 만들기 위한 주문 ERD입니다.
주문 도메인을 구성하는 단일 엔티티를 만들고, 이들의 연관관계를 설정합니다.
JPA는 엔티티 객체를 생성ㄴ할 때, 기본 생ㄴ성자(Default Constructor)를 사용합니다.
| 속성 | 기능 | 기본값 |
|---|---|---|
| name | JPA에서 사용할 엔티티 이름을 지정합니다. | 클래스 이름 |
| 속성 | 기능 | 기본값 |
|---|---|---|
| name | 매핑할 테이블 이름을 지정합니다. | 엔티티 이름 |
@Entity
@Table(name = "member")
public class Member {
@Id
private long id;
private String name;
private String nickName;
private int age;
private String address;
private String description;
// getter, setter
}
spring:
h2:
console:
enabled: true
jpa:
generate-ddl: true
hibernate:
ddl-auto: create-drop
database: H2
show-sql: true
open-in-view: false
properties:
hibernate:
query.in_clause_parameter_padding: true
generate-ddl : Entity설정을 참고하여 Spring Application 실행시점에 Hibernate에서 자동으로 DDL을 생성하는 설정을 할 수 있습니다. (true or false)
DDL(Data Definition Language)
데이터 정의어란? 데이터베이스를 정의하는 언어이며, 데이터를 생성, 수정, 삭제하는 등의 데이터의 전체의 골격을 결정하는 역할을 하는 언어입니다.
@Entity
@Table (name = "member")
@Getter
@Setter
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@Column(name = "name", nullable = false, length = 30)
private String name;
@Column(nullable = false, length = 30, unique = true)
private String nickName;
private int age;
@Column(name = "info", nullable = false)
private String address;
@Column(name = "description", nullable = true)
private String description;
}
영속화 전에 애플리케이션에서 직접 값을 할당한다.
@Id
@Column(name = "id")
private Long id;
영속화 전에 애플리케이션에서 직접 값을 할당한다.
@Id
@Column(name = "id")
private Long id;
데이터베이스 시퀀스에서 식별자 값을 획득한 후 영속화합니다.
ORACLE, H2
@Id
@Column(strategy = GenerationType.SEQUENCE)
private Long id;
데이터베이스 시퀀스 생성용 테이블에서 식별자 값을 획득한 후 영속화합니다.
자주 사용하는 전략이 아닙니다.
데이터베이스 엔티티를 저장해서 식별자 값을 획득한 후 영속화합니다.
엔티티가 영속화 되려면 식별자 값이 반드시 필요합니다.
DB에 INSERT되기 전까지 키값을 알 수 없으므로 em.persist() 시점에 INSERT쿼리가 수행됩니다.
MySQL (AUTO_INCREMENT)
@Id
@Column(strategy = GenerationType.IDENTITY)
private Long id;
데이터베이스 방언(dialect)에 따라서 자동으로 전략을 선택합니다.
ex. ORACLE DB인 경우 SEQUENCE, MySQL인 경우 IDENTITY
실제 업계에서 주로 사용하는 전략입니다.
@Id
@Column(strategy = GenerationType.AUTO)
private Long id;
@Entity
@Table (name = "orders")
public class Order {
@Id
@Column (name = "id")
private String uuid;
@Column (name = "order_datetime", columnDefinition = "TIMESTAMP")
private LocalDateTime orderDatetime;
@Enumerated(EnumType.STRING)
private OrderStatus orderStatus;
@Lob
private String memo;
}
columnDefinition = "TIMESTAMP" : DB엔진의 TIMESTAMP값을 저장하는데 사용합니다.
@Enumerated(EnumType.STRING) : EnumType값을 매핑합니다.
@Lob : 긴 텍스트를 넣고 싶을 때 사용합니다.
[JPA] DDL-AUTO 테이블 자동 생성 전략 - SQL Column 매칭
JPA - jpa hibernate의 ddl 자동생성 옵션과 초기화 전략
[스프링 부트 개념과 활용] 데이터 3. DB 초기화, 마이그레이션
DDL, DML, DCL 이란?
[JPA] nullable=false와 @NotNull 비교, Hibernate Validation