카테고리 없음

Persistence Context

designercoding 2022. 4. 28. 07:55

mysql 우측클릭

 

create database book_manager;

콘솔창에 위를 입력하여 book_manager 디비를 만든다.

 

show databases;

확인한다

 

application.yml에 디비를 연결해 준다.

datasource:
  url: jdbc:mysql://localhost:3306/book_manager
  username: root
  password: apmsetup

그리고

generate-ddl: true

입력해 준다.(자동으로 entity 활용하고 있는 테이블을 생성한다.)

 

hibernate:
  ddl-auto: create-drop

 

application.yml

spring:
  h2:
    console:
      enabled: true

  jpa:
    defer-datasource-initialization: true
    show-sql: true
    properties:
      hibernate:
        format_sql: true
    generate-ddl: true
    hibernate:
      ddl-auto: create-drop
  datasource:
    url: jdbc:mysql://localhost:3306/book_manager
    username: root
    password: apmsetup

server:
  port: 8070

테스트를 해본다.

generate-ddl

yml 계층에서도 볼 수 있듯이 jpa의 하위 속성이고 jpa는 인터페이스에 대한 정의이고 실제 구현체는 별도로 존재 즉 generate-ddl은 구현체와 상관없이 자동화된 ddl를 사용할 수 있도록 설정

ddl-auto가 generate-ddl 보다 세밀하여 ddl-auto가 우선권을 갖는다.

즉 generate-ddl 이 false고 ddl-auto가 create 면 generate-ddl을 무식하고 ddl-auto의 create를 따라간다

참고로 H2 db 같은 임페디드 db는 ddl-auto가 create-drop으로 작동한다.

 

initialization-mode: always
  datasource:
    url: jdbc:mysql://localhost:3306/book_manager
    username: root
    password: apmsetup
    initialization-mode: always

스프링에서 지정하는 initailization 모드가 동작한다.

즉 schma.sql 또는 data.sql 로딩해서 해당커리를 실행한다.

임베디드 디비에서는 자동으로 로딩

 

  sql:
    init:
      mode: always

으로 변경해야 한다

배보할때는 보통 초기화 하면 안되니깐 never로 지정

initialization-mode: never

intialization-mode가 always이고, schma.xml이 있다면 schma.xml 이 가장 높은 우선 순위를 가진다.

즉 위의 상황이라면 ddl-auto는 무시된다.

반응형