업데이트, 내보내기 및 hibernate.hbm2ddl.auto
업데이트 사용시기 및 사용하지 않을 때 알아야 할 값에 대해 더 알고 싶습니다 . 그리고 대안은 무엇입니까?
DB에서 발생할 수있는 변경 사항은 다음과 같습니다.
- 새로운 테이블
- 이전 테이블의 새 열
- 열이 삭제되었습니다.
- 변경된 열의 데이터 유형
- 열 유형이 속성을 변경 함
- 테이블 삭제
- 열 값이 변경됨
각각의 경우 가장 좋은 해결책은 무엇입니까?
답변
로부터 커뮤니티 문서 :
hibernate.hbm2ddl.auto SessionFactory가 생성 될 때 스키마 DDL을 데이터베이스에 자동으로 검증하거나 데이터베이스로 내 보냅니다. create-drop을 사용하면 SessionFactory가 명시 적으로 닫힐 때 데이터베이스 스키마가 삭제됩니다.
예를 들어 확인 | 업데이트 | 작성 | 만들기 드롭
가능한 옵션 목록은 다음과 같습니다.
- validate : 스키마를 검증하고 데이터베이스를 변경하지 않습니다.
- update : 스키마를 업데이트합니다.
- create : 스키마를 생성하여 이전 데이터를 삭제합니다.
- create-drop : SessionFactory가 명시 적으로 닫히면 (일반적으로 응용 프로그램이 중지 될 때) 스키마를 삭제합니다.
- none : 스키마와 관련이 없으며 데이터베이스를 변경하지 않습니다.
이러한 옵션은 개발자 도구를위한 것이며 프로덕션 수준의 데이터베이스를 용이하게하지 않기 위해 다음 질문을 살펴볼 수 있습니다. 최대 절전 모드 : hbm2ddl.auto = 생산시 업데이트?
답변
문서화되지 않은 “없음”이라는 값도있어 완전히 비활성화 할 수 있습니다.
답변
구성 특성이 호출됩니다 hibernate.hbm2ddl.auto
개발 환경에서는 hibernate.hbm2ddl.auto=create-drop
배포 할 때마다 깨끗한 데이터베이스를 삭제하고 생성하여 데이터베이스가 알려진 상태에 있도록 설정했습니다.
이론적으로 hibernate.hbm2ddl.auto=update
모델을 변경하여 데이터베이스를 업데이트하도록 설정할 수 있지만 프로덕션 데이터베이스에서는 데이터베이스를 신뢰할 수 없습니다. 이 문서의 이전 버전은 적어도 실험적인 것이라고 밝혔다. 현재 상태를 모르겠습니다.
따라서 프로덕션 데이터베이스의 경우 설정하지 마십시오 hibernate.hbm2ddl.auto
. 기본값은 데이터베이스를 변경하지 않는 것입니다. 대신 한 버전에서 다음 버전으로 변경 사항을 적용하는 SQL DDL 업데이트 스크립트를 수동으로 만듭니다.
답변
DB를 업데이트하기 위해 liquibase 를 사용 합니다. 최대 절전 모드의 스키마 업데이트 기능은 개발자가 새로운 기능을 개발하는 동안에 만 괜찮습니다. 프로덕션 상황에서는 db 업그레이드를보다 신중하게 처리해야합니다.
답변
그것은 꽤 오래된 게시물이지만 주제에 대한 조사를 했으므로 공유 할 생각이었습니다.
최대 절전 모드 .hbm2ddl.auto
설명서에 따라 다음과 같은 네 가지 유효한 값을 가질 수 있습니다.
작성 | 업데이트 | 확인 | 만들기 드롭
다음은 이러한 값으로 표시되는 동작에 대한 설명입니다.
- create :-스키마를 만듭니다. 스키마에 이전에 존재하는 데이터가 있다면 손실됩니다.
- update :-주어진 값으로 스키마를 업데이트합니다.
- validate :-스키마를 검증합니다. DB에는 아무런 변화가 없습니다.
- create-drop :-이전에 존재하는 데이터를 파기하여 스키마를 만듭니다 (있는 경우). 또한 SessionFactory가 닫힐 때 데이터베이스 스키마를 삭제합니다.
다음은 주목할만한 중요한 사항입니다.
- 의 경우 갱신 , 경우 스키마는 스키마가 생성 된 DB에 존재하지 않습니다.
- 의 경우 유효성 검사 스키마가 DB에 존재하지 않는 경우, 그것은 만들어지지 않습니다. 대신 오류가 발생합니다.
Table not found:<table name>
- create-drop의 경우 세션을 닫을 때 스키마가 삭제되지 않습니다. SessionFactory를 닫을 때만 삭제됩니다.
-
이 속성에 값을 주면 (위의 4 가지 값 대신 abc) 또는 비어 있습니다. 다음과 같은 동작을 보여줍니다.
-스키마가 DB에 존재하지 않는 경우 :-스키마를 생성
-DB에 스키마가있는 경우 :- 스키마를 업데이트 하십시오.
답변
먼저 hbm2ddl
구성 특성 의 가능한 값 은 다음과 같습니다.
none
-조치가 수행되지 않습니다. 스키마가 생성되지 않습니다.create-only
-데이터베이스 스키마가 생성됩니다.drop
-이후에 데이터베이스 스키마가 삭제되고 작성됩니다.create
-이후에 데이터베이스 스키마가 삭제되고 작성됩니다.create-drop
-이후에 데이터베이스 스키마가 삭제되고 작성됩니다. 를 닫으면SessionFactory
데이터베이스 스키마가 삭제됩니다.validate
-데이터베이스 스키마는 엔티티 매핑을 사용하여 검증됩니다.update
-기존 데이터베이스 스키마와 엔티티 매핑을 비교하여 데이터베이스 스키마가 업데이트됩니다.
가장 일반적인 Hibernate DDL 생성 전략에 대한 블로그 게시물 을 전담했습니다 .
- 는
hibernate.hbm2ddl.auto="update"
일부 사용자 정의 스크립트를 기능을 추가하거나 실행 계획이라면 편리하지만 덜 유연하다. - 가장 유연한 접근 방식은 사용하는 것입니다 이동 경로를 .
그러나 Flyway를 사용하더라도 hbm2ddl을 사용하여 초기 마이그레이션 스크립트를 생성 할 수 있습니다. 에서 이 기사 , 당신은 당신이 jOOQ 표 모델로 JPA 엔티티 모델을 결합 할 수있는 방법을 볼 수 있습니다.
답변
hibernate.hbm2ddl.auto
sessionFactory가 작성 될 때 DDL을 자동으로 유효성 검증하고 스키마로 내 보냅니다.
기본적으로 DB에서는 자동으로 생성 또는 수정을 수행하지 않습니다. 사용자가 아래 값 중 하나를 설정하면 DDL 스키마 변경이 자동으로 수행됩니다.
-
create-스키마 생성
<entry key="hibernate.hbm2ddl.auto" value="create">
-
업데이트-기존 스키마 업데이트
<entry key="hibernate.hbm2ddl.auto" value="update">
-
유효성 검사-기존 스키마 유효성 검사
<entry key="hibernate.hbm2ddl.auto" value="validate">
-
create-drop-세션이 시작되고 종료 될 때 스키마를 자동으로 작성 및 삭제
<entry key="hibernate.hbm2ddl.auto" value="create-drop">