IT이야기

Hibernate hbm2dl에서 사용 가능한 값은 얼마입니까?자동 설정 및 기능

cyworld 2022. 6. 20. 21:45
반응형

Hibernate hbm2dl에서 사용 가능한 값은 얼마입니까?자동 설정 및 기능

업데이트, 내보내기 및 에 부여될 수 있는 값에 대해 자세히 알고 싶습니다.hibernate.hbm2ddl.auto
업데이트를 사용할 때와 사용하지 않을 때를 알아야 합니다.그럼 대안이 뭐죠?

DB에서 발생할 수 있는 변경 사항은 다음과 같습니다.

  • 새 테이블
  • 오래된 테이블의 새 열
  • 열이 삭제되었습니다.
  • 변경된 열의 데이터 유형
  • 컬럼의 종류가 속성을 변경했다
  • 테이블이 떨어짐
  • 변경된 열의 값

어느 경우든 가장 좋은 솔루션은 무엇입니까?

커뮤니티 매뉴얼:

hibernate.hbm2dl.auto SessionFactory 작성 시 스키마 DDL을 자동으로 검증 또는 데이터베이스로 내보냅니다.create-drop을 사용하면 SessionFactory가 명시적으로 닫히면 데이터베이스 스키마가 폐기됩니다.

예: validate | update | create | create-drop

가능한 옵션 목록은 다음과 같습니다.

  • validate: 스키마를 검증하고 데이터베이스를 변경하지 않습니다.
  • update: 스키마를 업데이트합니다.
  • create: 스키마를 생성하여 이전 데이터를 삭제합니다.
  • create-drop: SessionFactory가 명시적으로 닫힐 때(일반적으로 응용 프로그램이 정지될 때) 스키마를 드롭합니다.
  • none: 스키마를 사용하지 않고 데이터베이스를 변경하지 않습니다.

이러한 옵션은 개발 도구를 의도한 것으로 보이며 실제 가동 수준의 데이터베이스를 원활하게 하기 위한 것이 아닙니다. Hibernate: hbm2dl이라는 질문을 참조하십시오.auto=업데이트를 실가동 중입니까?

문서화되어 있지 않은 값인 "none"도 있어 완전히 비활성화됩니다.

구성 속성이 호출됩니다.hibernate.hbm2ddl.auto

델의 개발 환경에서hibernate.hbm2ddl.auto=create-drop데이터베이스를 기존 상태로 만들기 위해 도입할 때마다 데이터베이스를 삭제 및 작성합니다.

이론상으로는 다음과 같이 설정할 수 있습니다.hibernate.hbm2ddl.auto=update모델을 변경하여 데이터베이스를 업데이트하지만 프로덕션 데이터베이스에서는 신뢰하지 않습니다.이 문서의 이전 버전에는 적어도 실험적인 내용이라고 나와 있습니다.현재는 알 수 없습니다.

따라서 프로덕션 데이터베이스에 대해hibernate.hbm2ddl.auto- 기본값은 데이터베이스를 변경하지 않습니다.대신 버전 간에 변경을 적용하는 SQL DDL 업데이트 스크립트를 수동으로 만듭니다.

번째로, 「」, 「」에 수 있는 것은, 「」입니다.hbm2ddl구성 속성은 다음과 같습니다.

  • none 않습니다 - 아무 조치도 취해지지 않습니다.이치노
  • create-only - 데이터베이스 스키마가 생성됩니다.
  • drop - 데이터베이스 스키마가 삭제됩니다.
  • create 스키마는 되고 생성됩니다 - 데이터베이스 스키마는 나중에 됩니다.
  • create-drop 스키마는 되고 생성됩니다 - 데이터베이스 스키마는 나중에 됩니다.★★★★를 SessionFactory이치노
  • validate- 매핑을 됩니다. - 엔티티 매핑을 사용하여 검증됩니다.
  • update을 비교함으로써 스키마가 「 」 「 」

hibernate.hbm2ddl.auto="update"기능을 추가하거나 일부 커스텀스크립트를 실행하는 경우 편리하지만 유연성은 떨어집니다.

따라서 가장 유연한 접근 방식은 Flyway를 사용하는 것입니다.

그러나 Flyway를 사용하더라도 hbm2dl을 사용하여 초기 마이그레이션 스크립트를 생성할 수 있습니다.

당신의 db 업데이트에 리퀴베이스를 사용하겠습니다.hibernate의 스키마 업데이트 기능은 개발자가 새로운 기능을 개발하는 동안에만 사용할 수 있습니다.실제 가동 상황에서는 DB 업그레이드를 보다 신중하게 처리해야 합니다.

꽤 오래된 게시물이지만, 주제에 대해 조사를 좀 했기 때문에 공유할 생각을 했습니다.

hibernate.hbm2dl.자동

설명서에 따르면 다음 4가지 유효한 값을 지정할 수 있습니다.

create | update | validate | create

다음은 이러한 값으로 표시되는 동작에 대한 설명입니다.

  • create :- 스키마를 만듭니다. 스키마에 이전에 존재했던(있는 경우) 데이터가 손실됩니다.
  • update:- 지정된 값으로 스키마를 업데이트합니다.
  • validate: 스키마를 검증합니다.DB는 변경되지 않습니다.
  • create-drop:- 이전에 존재했던 데이터가 삭제되어 스키마를 만듭니다(있는 경우).또한 SessionFactory가 닫히면 데이터베이스 스키마도 폐기됩니다.

주의할 점은 다음과 같습니다.

  • 업데이트 시 DB에 스키마가 없는 경우 스키마가 생성됩니다.
  • 검증의 경우 DB에 스키마가 존재하지 않으면 생성되지 않습니다.대신 다음과 같은 오류가 발생합니다.Table not found:<table name>
  • create-drop의 경우 세션 종료 시 스키마는 드롭되지 않습니다.Session Factory를 닫았을 때만 드롭됩니다.
  • 이 속성에 값을 지정했을 경우(위에서 설명한 4가지 값 대신 abc로 표시) 또는 빈칸으로 둘 경우.다음과 같은 동작을 나타냅니다.

    - DB에 스키마가 없는 경우: - 스키마가 생성됩니다.

    DB:- 스키마가 있는 경우 스키마를 업데이트합니다.

hibernate.hbm2ddl.autosession Factory 작 、 DDL 、 DDL 。

기본적으로 DB에서 자동으로 생성 또는 수정을 수행하지 않습니다.사용자가 다음 값 중 하나를 설정하면 DDL 스키마 변경이 자동으로 수행됩니다.

  • create - 스키마 만들기

    <entry key="hibernate.hbm2ddl.auto" value="create">
    
  • update - 기존 스키마 업데이트

    <entry key="hibernate.hbm2ddl.auto" value="update">
    
  • validate - 기존 스키마의 유효성을 확인합니다.

    <entry key="hibernate.hbm2ddl.auto" value="validate">
    
  • create-drop - 세션 시작 및 종료 시 스키마를 자동으로 생성하여 삭제합니다.

    <entry key="hibernate.hbm2ddl.auto" value="create-drop">
    

하십시오.org.hibernate.cfg.AvailableSettings클래스는 휴지 상태 JAR에 포함되어 있으며 가능한 모든 설정에 대한 상수를 찾을 수 있습니다.예를 들어 다음과 같습니다.

/**
 * Auto export/update schema using hbm2ddl tool. Valid values are <tt>update</tt>,
 * <tt>create</tt>, <tt>create-drop</tt> and <tt>validate</tt>.
 */
String HBM2DDL_AUTO = "hibernate.hbm2ddl.auto";
  • validate: 키 : : : : : : : : : : 。데이터베이스는 변경되지 않습니다.
  • update 쿼리로 현재 실행 쿼리로 스키마를 업데이트합니다.
  • create를 생성하여 매번 새로운 스키마를 생성하여 이전 데이터를 삭제합니다.
  • create-drop: 응용 응용 프로그램이 정지되거나 Session Factory가 명시적으로 닫히면 스키마를 드롭합니다.

내 생각에 넌 그 일에 집중해야 할 것 같아

SchemaExport Class 

이 클래스는 구성을 동적으로 만듭니다.따라서 최적의 스위트를 선택할 수 있습니다.

체크아웃 [Schema Export]

validate: 하고 DB를 하지 않습니다 DB를 사용하다
매핑 파일에 새 열을 추가하고 삽입 작업을 수행했다고 가정하면 기존 스키마가 삽입할 개체와 다르기 때문에 "XYZ 열 누락" 예외가 발생합니다.새 열을 수동으로 추가하여 테이블을 변경한 후 삽입 작업을 수행하면 새 열과 함께 모든 열이 테이블에 확실히 삽입됩니다.기존 스키마/테이블을 변경/변경하지 않음을 의미합니다.

update: 조작을 실행하면 데이터베이스의 기존 테이블이 변경됩니다.이 hbm2dl 옵션을 사용하여 열을 추가하거나 제거할 수 있습니다.그러나 'NOT NULL'인 새 열을 추가할 경우 해당 열을 DB에 추가하는 것은 무시됩니다.기존 테이블에 'NOT NULL' 열을 추가하려면 테이블을 비워 두어야 합니다.

5.0 이후, 이러한 값은, 전용으로 사용할 수 있습니다.Enum: (값과 함께 표시됨)NONE2 (5.2 이후)

또는 5.1 이후로는, EnumJPA 2는 DDL을 사용합니다.

, 아직 설정할 수 없습니다.DataSource프로그래밍 방식으로 사용할 수 있습니다.이 코드와 조합하여 사용하는 것이 좋지만 현재 코드에서는String값(에서 제외):

this.schemaAutoTooling = SchemaAutoTooling.interpret( (String) configurationSettings.get( AvailableSettings.HBM2DDL_AUTO ) );

…내부…사내부…사내부…사내부enum공개되지 않는 두 가지 가치관을 가지고 있습니다.

예에서는 형식의 입니다.DataSourceSpring Boot에 Boot 중 에서 ).name().toLowerCase()없이 할 수 .create-drop를를,, 음음음음음음음음

@Bean(name = ENTITY_MANAGER_NAME)
public LocalContainerEntityManagerFactoryBean internalEntityManagerFactory(
        EntityManagerFactoryBuilder builder,
        @Qualifier(DATA_SOURCE_NAME) DataSource internalDataSource) {

    Map<String, Object> properties = new HashMap<>();
    properties.put(AvailableSettings.HBM2DDL_AUTO, SchemaAutoTooling.CREATE.name().toLowerCase());
    properties.put(AvailableSettings.DIALECT, H2Dialect.class.getName());

    return builder
            .dataSource(internalDataSource)
            .packages(JpaModelsScanEntry.class, Jsr310JpaConverters.class)
            .persistenceUnit(PERSISTENCE_UNIT_NAME)
            .properties(properties)
            .build();
}

기본값을 검색하는 모든 사용자에게...

spring-boot 버전 2.0.5 및 JpaProperties 1.1.0의 소스 코드에 기재되어 있습니다.

    /**
     * DDL mode. This is actually a shortcut for the "hibernate.hbm2ddl.auto"
     * property. Defaults to "create-drop" when using an embedded database and no
     * schema manager was detected. Otherwise, defaults to "none".
     */
    private String ddlAuto;

★★★★★★★★★★★★★★★★...을 '먹다'라고 .dll.auto테이블.dll .dll 조작은 dll ( " / drop schema / table " / drop schema / table " 만입니다.놀랍게도 dml과도 관련이 있다는 것을 알았습니다.만.updatedml로 하겠습니다.

데이터베이스에 하려고 할 때, 되었습니다.단, 인메모리 데이터베이스에는 데이터 입력이 없습니다.update

언급URL : https://stackoverflow.com/questions/438146/what-are-the-possible-values-of-the-hibernate-hbm2ddl-auto-configuration-and-wha

반응형