[java] Hibernate hbm2ddl.auto 설정의 가능한 값은 무엇이며 어떻게합니까?

업데이트, 내보내기 및 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 생성 전략에 대한 블로그 게시물 을 전담했습니다 .

  1. hibernate.hbm2ddl.auto="update"일부 사용자 정의 스크립트를 기능을 추가하거나 실행 계획이라면 편리하지만 덜 유연하다.
  2. 가장 유연한 접근 방식은 사용하는 것입니다 이동 경로를 .

그러나 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">