Kể từ 5.0 , giờ đây bạn có thể tìm thấy các giá trị đó một cách chuyên dụng Enum
: org.hibernate.boot.SchemaAutoTooling
(được nâng cao với giá trị NONE
kể từ 5.2).
Hoặc thậm chí tốt hơn, kể từ 5.1 , bạn cũng có thể sử dụng kết hợp các hành động DDL Hibernate "kế thừa".org.hibernate.tool.schema.Action
Enum
Nhưng , bạn chưa thể cấu hình một DataSource
chương trình với điều này. Nó sẽ tốt hơn để sử dụng kết hợp với org.hibernate.cfg.AvailableSettings#HBM2DDL_AUTO
nhưng mã hiện tại mong đợi một String
giá trị (trích từ SessionFactoryBuilderImpl
):
this.schemaAutoTooling = SchemaAutoTooling.interpret( (String) configurationSettings.get( AvailableSettings.HBM2DDL_AUTO ) );
enum
Giá trị và nội bộ của cả hai org.hibernate.boot.SchemaAutoTooling
và org.hibernate.tool.schema.Action
không được công khai.
Dưới đây, một DataSource
cấu hình lập trình mẫu (được sử dụng trong các ứng dụng Spring Boot của tôi) sử dụng một gambit nhờ .name().toLowerCase()
nhưng nó chỉ hoạt động với các giá trị không có dấu gạch ngang (không phải create-drop
ví dụ):
@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();
}