如何使用hibernate 5在没有数据库连接的情况下创建sql文件



在hibernate 4中,我使用config.generateSchemaCreationScript(dialect);从我们的类中生成sql创建脚本文件。在更新到hibernate 5(确切地说是5.6.5.最终版本(之后,我正在尝试创建相同的行为。

尝试了以下操作:

Configuration config = new Configuration();
for (Class<?> type : types) {
config.addAnnotatedClass(type);
}
ServiceRegistry serviceRegistry = config.getStandardServiceRegistryBuilder().applySetting(Environment.DIALECT, MariaDBDialect.class).build();
Metadata metadata = new MetadataSources(serviceRegistry).getMetadataBuilder().build();
SchemaExport schemaExport = new SchemaExport();
schemaExport.setHaltOnError(true);
schemaExport.setFormat(true);
schemaExport.setDelimiter(";");
schemaExport.setOutputFile(new File("create.sql"));
schemaExport.createOnly(EnumSet.of(TargetType.SCRIPT), metadata);

这个代码给了我很多警告";java.sql.SQLException:没有合适的驱动程序";以及";java.sql.SQLException:无法从基础数据库获取连接&";。元数据对象的创建似乎已经尝试创建数据库连接。但我没有/想要数据库连接,我只想从数据库对象创建sql文件。

我也试过做schemaExport.execute(EnumSet.of(TargetType.SCRIPT), Action.CREATE, null, serviceRegistry);。这仍然会尝试设置数据库连接,但在元数据出现nullpointer异常时失败。

在没有数据库连接的情况下,如何在hibernate 5中从配置创建sql文件?

这里也有同样的问题,无法找到阻止它这样做的方法,作为一种变通方法,我使用了hsqldb:读取hibernate.properties+只修改了hsqldb的driver/url/user/password,然后才将属性交给hibernate处理:这样hibernate就可以连接到一个数据库(即使它不需要一个数据库来执行此任务(,而方言保持不变,这对于DDL/sql脚本的生成非常重要;经过测试并证明有效。

相关内容

最新更新