ตั้งแต่ 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 ของฉัน) ซึ่งใช้ gambit ขอบคุณ.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();
}