Починаючи з 5,0 , тепер ви можете знайти ці значення у виділеному Enum
: org.hibernate.boot.SchemaAutoTooling
(покращеному значенням NONE
з 5.2).
Або ще краще, оскільки 5.1 ви також можете використовувати те, що поєднує в собі JPA 2 та "застарілі" дії зі сплячого DDL.org.hibernate.tool.schema.Action
Enum
Але ви ще не можете DataSource
програмно налаштувати це. Було б приємніше використовувати це в поєднанні з, org.hibernate.cfg.AvailableSettings#HBM2DDL_AUTO
але поточний код очікує String
значення (уривок, узятий з SessionFactoryBuilderImpl
):
this.schemaAutoTooling = SchemaAutoTooling.interpret( (String) configurationSettings.get( AvailableSettings.HBM2DDL_AUTO ) );
… І внутрішні enum
цінності обох org.hibernate.boot.SchemaAutoTooling
і org.hibernate.tool.schema.Action
не піддаються публічному опроміненню.
Далі, зразок програмної DataSource
конфігурації (використовується в моїх програмах Spring 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();
}