在 hibernate 4 - spring 4 设置中,可以使用SchemaExport
对象生成 DDL:
LocalSessionFactoryBean sfb = (LocalSessionFactoryBean) context.getBean("&sessionFactory");
SchemaExport schema = new SchemaExport(sfb.getConfiguration());
但是 hibernate 5SchemaExport(Configuration configuration)
用SchemaExport(MetadataImplementator metadataImplementator)
.
MetadataImplementator 在
org.springframework.orm.hibernate5.LocalSessionFactoryBean
或者 org.springframework.orm.hibernate5.LocalSessionFactoryBuilder
我是这样破解的:
MetadataSources metadataSources = (MetadataSources) FieldUtils.readField(configuration, "metadataSources", true);
Metadata metadata = metadataSources
.getMetadataBuilder(configuration.getStandardServiceRegistryBuilder().build())
.applyPhysicalNamingStrategy(new MyPhysicialNamingStrategy())
.applyImplicitNamingStrategy(ImplicitNamingStrategyJpaCompliantImpl.INSTANCE)
.build();
MetadataImplementor metadataImpl = (MetadataImplementor) metadata;
SchemaExport schema = new SchemaExport(metadataImplementor);
但是最好有更好的方法,而且验证器注释(@NotNull,@Size)不用于 DDL 生成,我不知道这是 Hibernate 5 还是这个设置中的错误。
我正在使用休眠5.0.0.CR4和弹簧4.2.0.RELEASE