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.auto
session 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
이 클래스는 구성을 동적으로 만듭니다.따라서 최적의 스위트를 선택할 수 있습니다.
validate
: 하고 DB를 하지 않습니다 DB를 사용하다
매핑 파일에 새 열을 추가하고 삽입 작업을 수행했다고 가정하면 기존 스키마가 삽입할 개체와 다르기 때문에 "XYZ 열 누락" 예외가 발생합니다.새 열을 수동으로 추가하여 테이블을 변경한 후 삽입 작업을 수행하면 새 열과 함께 모든 열이 테이블에 확실히 삽입됩니다.기존 스키마/테이블을 변경/변경하지 않음을 의미합니다.
update
: 조작을 실행하면 데이터베이스의 기존 테이블이 변경됩니다.이 hbm2dl 옵션을 사용하여 열을 추가하거나 제거할 수 있습니다.그러나 'NOT NULL'인 새 열을 추가할 경우 해당 열을 DB에 추가하는 것은 무시됩니다.기존 테이블에 'NOT NULL' 열을 추가하려면 테이블을 비워 두어야 합니다.
5.0 이후, 이러한 값은, 전용으로 사용할 수 있습니다.Enum
: (값과 함께 표시됨)NONE
2 (5.2 이후)
또는 5.1 이후로는, Enum
JPA 2는 DDL을 사용합니다.
단, 아직 설정할 수 없습니다.DataSource
프로그래밍 방식으로 사용할 수 있습니다.이 코드와 조합하여 사용하는 것이 좋지만 현재 코드에서는String
값(에서 제외):
this.schemaAutoTooling = SchemaAutoTooling.interpret( (String) configurationSettings.get( AvailableSettings.HBM2DDL_AUTO ) );
…내부…사내부…사내부…사내부enum
공개되지 않는 두 가지 가치관을 가지고 있습니다.
예에서는 형식의 입니다.DataSource
Spring 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과도 관련이 있다는 것을 알았습니다.만.update
dml로 하겠습니다.
데이터베이스에 하려고 할 때, 되었습니다.단, 인메모리 데이터베이스에는 데이터 입력이 없습니다.update
언급URL : https://stackoverflow.com/questions/438146/what-are-the-possible-values-of-the-hibernate-hbm2ddl-auto-configuration-and-wha
'IT이야기' 카테고리의 다른 글
.vue 파일에서 모듈 증강이 작동하지 않습니다. (0) | 2022.06.20 |
---|---|
사용 시 select2에서 선택한 텍스트를 얻는 방법사용 시 select2에서 선택한 텍스트를 얻는 방법 (0) | 2022.06.20 |
vue 구성 요소에서 속성 감시 (0) | 2022.06.20 |
char는 항상 8비트를 가지고 있습니까? (0) | 2022.06.20 |
C는 그다지 어렵지 않습니다.void ( * ( * f [ ] ) ) (0) | 2022.06.20 |