노트코드
노트코드
노트코드

블로그 메뉴

  • 홈
  • 이력서
  • 이전 블로그
  • 글쓰기
  • 관리자페이지
  • 분류 전체보기 (57)
    • 코틀린 (2)
      • 실무 프로젝트로 배우는 Kotlin & Sprin.. (2)
    • JAVA (1)
      • 디자인패턴 (1)
      • 객체지향 5대원칙 (0)
    • SPRING (32)
      • JPA (11)
      • 스프링시큐리티 (1)
      • 스프링 (8)
      • QueryDsl (1)
      • 스프링배치 (11)
    • AZURE (0)
    • ETC (10)
      • MAVEN (0)
      • GIT (0)
      • ReMind (3)
      • Exception (1)
      • CS (6)
    • 책 (8)
      • 이것이 자바다 (8)

최근 글

최근 댓글

태그

  • JPA
  • 스프링
전체 방문자
오늘
어제
hELLO · Designed By 정상우.
노트코드

노트코드

SPRING/JPA

[JPA] Hibernate 초기화 전략

2022. 1. 21. 01:16

Spring-data-JPA와 DBMS를 연결해서 사용할 때 간편히 개발환경의 변경사항을 적용하여 테스트 할 수 있다.

DDL Generation

Spring은 EntityScan을 통해 @Entity 에노테이션이 명시한 클래스를 찾는다.

Spring.jpa.generate-ddl=true 옵션을 true로 설정하면 해당 데이터를 근거로 서버 시작 시점에 DDL문을 생성하여 DB에 적용한다.

jpa.generate설정은 JPA 구현체 DDL 생성 옵션의 링크이고, true/false밖에 선택할 수 없다.

Spring.jpa.hibernate.ddl-auto 옵션을 통해 보다 상세한 데이터 베이스 초기화 전략을 설정할 수 있음

  • none: 아무것도 실행하지 않음
  • create-drop : SessionFactory가 시작될 때 drop 및 생성을 실행하고, SessionFactory가 종료될 때 drop을 실행한다.
  • create: SessionFactory가 시작될 때 데이터베이스 drop을 실행하고 생성된 DDL을 실행한다.
  • update: 변경된 스키마를 적용한다.
  • validate : 변경된 스키마가 있다면 변경점을 출력하고 애플리케이션을 종료한다.

SQL script

Spring 기본값으로 classpath 루트에 schema.sql 파일이 있다면 서버 시작시 스크립트를 실행한다.

보통 schema.sql은 DDL 스크립트를 명시해두고, 데이터를 위한 DML문은 data.sql 파일로 작성해두면 자동으로 실행한다.

💡 **Hibernate에도 기본 실행 스크립트가 있다는 점을 조심해야한다.**

Hibernatesms classpath 루트의 import.sql 파일이 있다면 서버 시작시 해당 스크립트를 자동 실행한다. 만약 Spring이 인식하는 schema.sql파일과 data.sql 파일이 있거나,
Spring.datasource.data옵션을 통해 추가로 적용할 스크립트 파일을 지정했음에도 불구하고, 동일 내용으로 import.sql 파일을 작성한다면 중복 입력으로 오류가 발생할 수 있다.

*Hibernate가 인식하는 import.sql 파일의 경우, 각 명령을 한줄로 작성해야 오류가 발생하지 않는다.

또한 JPA는 schema-${platform}.sql 과 data-${platform}.sql 파일이 있다면 실행시켜 데이터베이스 플랫폼에 맞춘 스크립트 실행이 가능하다. 사용할 플랫폼 정의는 Spring.datasource.platform값을 따른다.

spring.datasource.initialization-mode=never # Property for Spring boot 2.0
spring.datasource.initialize=false # Property for Spring boot 1.0


→data.sql로 웹구동시 데이터 insert하기

'SPRING > JPA' 카테고리의 다른 글

[JPA] 프록시  (0) 2022.01.21
[JPA]객체지향 쿼리 심화  (0) 2022.01.21
[JPA]NamedQuery  (0) 2022.01.21
[JPA] 엔티티 직접사용  (0) 2022.01.21
[JPA] 값 타입종류  (0) 2022.01.21
    'SPRING/JPA' 카테고리의 다른 글
    • [JPA]객체지향 쿼리 심화
    • [JPA]NamedQuery
    • [JPA] 엔티티 직접사용
    • [JPA] 값 타입종류
    노트코드
    노트코드
    노션 블로그에서 티스토리로 이전공사중

    티스토리툴바