JPA/JPA 기본

11. DB 스키마 자동 생성

sdafdq 2023. 10. 21. 15:23

JPA는 매핑 정보만 봐도 어떤 테이블인지, 열은 뭔지, 어떤 쿼리를 만들어야 하는지 까지도 알기 때문에,

 

테이블도 자동으로 생성할 수 있다.

 

당연히 운영단계에서 사용하는 것은 아니고, 

개발에서 테스트 할 때나 로컬PC에서 작업할 때 도움이 된다.

 

자동생성 된 것이므로, 약간 의도되지 않은 면 들이 있음. 근데 개발할때만 쓸거라 상관은 없음.

 

 

이걸 사용하려면 우리가 JPA에게 DB정보를 정의해 뒀던 persistence.xml에 속성을 추가 해 줘야 함.

<property name="hibernate.hbm2ddl.auto" value="create"/>

ddl auto를 create로 하겠다.

 

이렇게 하면은, 자동으로 테이블을 생성함.

 

Hibernate: 
    drop table if exists Member cascade 
    
    
Hibernate: 
    create table Member (
        id bigint not null,
        name varchar(255),
        primary key (id)
    )

먼저, 테이블이 이미 존재할 시 삭제하라는 쿼리를 날리고,

테이블을 생성하라는 쿼리를 보냄.

자동으로 이렇게 보내는 거임.

 

 

update는 예를 들어 우리가 정의한 @Entity에 뭔가 필드로 추가 했고,

이미 그 테이블이 DB에 있다면,

그 추가한 필드를 반영해 줌

alter table 테이블명 add column 추가한필드명 ~~~~~

해서

 

근데 지우는 건 반영되지 않음.

 

column 하나 날라가면 큰일날 수도 있으니까.

 

validate는 테이블과 @Entity가 안 맞을 때 에러를 뿜음.

@Entity의 필드명과 테이블의 열명이 틀렸다던지..

 

테이블 명이 틀렸다던지도 그럴테고..

 

none은 안하는 거.

 

 

근데 그냥 사실, 왠만하면 쓰지 말라고 함.

alter같은 것도 잘못 치면 진짜 데이터 몇천만 건 있으면 시스템 중단될 수 있음.

 

자동으로 테이블을 수정시킨다는 면이 굉장히 위험함.

 

진짜 개인 로컬서버에서만 쓰고,

 

여러 명 있는 개발서버나 그런 것에서만 정말 왠만하면 쓰지 마셈.

 

 

진짜 왠만하면 쓰지 말아야 겠다...

 

 

@Column 속성 중에도 DDL 생성에만 영향을 주는 게 있음.

@Column(unique = true, length = 10)

저 두개.

length는 뭐 테이블 생성할 때 varchar(10) 이렇게

 

 

이런 자동 생성 기능을 DDL이라 하는 듯

'JPA > JPA 기본' 카테고리의 다른 글

13. 기본 키 매핑  (0) 2023.10.21
12. 필드와 컬럼 매핑  (0) 2023.10.21
10. 객체와 테이블의 매핑  (0) 2023.10.21
9. 준영속 상태  (0) 2023.10.20
8. 플러시  (0) 2023.10.20