5.0 के बाद से , अब आप उन मूल्यों को एक समर्पित में पा सकते हैं Enum
: org.hibernate.boot.SchemaAutoTooling
( NONE
5.2 से मूल्य के साथ बढ़ाया गया )।
या इससे भी बेहतर, 5.1 के बाद , आप जेपीए 2 और "लीगेसी" हाइबरनेट डीडीएल कार्यों को जोड़ती है , जो भी उपयोग कर सकते हैं ।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
कॉन्फ़िगरेशन (मेरे स्प्रिंग बूट अनुप्रयोगों में से एक में प्रयुक्त) जो एक धन्यवाद का उपयोग .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();
}