仅当数据库不存在时,ebean才会运行ddl

时间:2016-02-27 23:12:11

标签: java ddl ebean

如果我将ddl.generateddl.run设置为true,则在重新启动应用时,它总是会丢弃我的数据库。

如果我添加ddl.createOnly=true,则在创建ebean服务器实例时会抛出异常。

问题:

无论如何我都说“请创建数据库,如果它不存在,或者如果已经创建了数据库则不做任何事情”?

3 个答案:

答案 0 :(得分:2)

两者都是。设置为true时,ddl.generate和ddl.run将首先删除DDL。 但是当你将ddl.generate设置为false并且ddl.run设置为true时,它将首先删除DDL,然后创建DDL,如果在数据库中添加了任何新表,则会导致更新数据库。

参考:您可以看到https://ebean-orm.github.io/apidocs/com/avaje/ebean/dbmigration/DdlGenerator.html

答案 1 :(得分:1)

  

如果数据库不存在,请创建数据库

没有。

答案 2 :(得分:1)

作为一种解决方法,您可以将EbeanServerFactory.create()调用包装在try-catch块中,如此

ServerConfig serverConfig = new ServerConfig();
serverConfig.setName("mydb");

// ddl.generate, ddl.createOnly and ddl.run should be set to true in
// your ebean.properties file(if using one) else set them
// programmatically
serverConfig.loadFromProperties();

try {
    server = EbeanServerFactory.create(ebeanConfig);
} catch(Exception e) {
    ebeanConfig.setDdlRun(false);
    server = EbeanServerFactory.create(ebeanConfig);
}

能够说createIfNotExists = true会更好,但这同时适用。