为什么必须禁用Javers的架构管理才能初始化我的应用程序?

时间:2019-01-17 01:09:34

标签: spring-boot javers

在我的Spring-Boot项目中,何时:

  • javers.sqlSchemaManagementEnabled = true
    Javers表是在第一次执行时创建的(当表在数据库中不存在时),并且代码按预期运行,但是从第二次执行起,抛出异常,说明无法创建表,因为它们已经存在。 这是我无法理解的情况,Javers是否不应该知道表已经存在并且不尝试创建表?

  • javers.sqlSchemaManagementEnabled = false
    如果这些表已经在数据库上创建,手动执行或使用此选项为“ true”至少执行一次应用程序,则该应用程序将按预期执行。

我该怎么办?

  1. 我的Spring-Boot配置是否有问题?即使已经创建了表,该应用程序也应该以“ sqlSchemaManagementEnabled = true”运行?
  2. 我希望离开sqlSchemaManagementEnabled = false并手动创建表吗?

2 个答案:

答案 0 :(得分:0)

如果javers.sqlSchemaManagementEnabled=true,Javers将创建尚不存在的SQL表。

已在此处选中

https://github.com/javers/javers/blob/master/javers-persistence-sql/src/main/java/org/javers/repository/sql/schema/JaversSchemaManager.java#L215

很难说为什么在您的情况下不起作用,请尝试使用最新的Javers版本调试此代码。

答案 1 :(得分:0)

在PostgreSQL中使用非公共模式时,我遇到了同样的问题。

我通过切换到公共模式解决了该问题,现在它可以与javers.sqlSchemaManagementEnabled=true正常使用。

对于其他架构,您应该以某种方式在org.javers.repository.sql.schema.TableNameProvider中指定架构名称