为多个模式中的实体生成Liquibase-hibernate changelog

我试图使用liquibase-hibernate5(Spring-5.0.4.RELEASE,Hibernate-5.2.15)通过liquibase-maven-plugin在Hibernate实体(来自单个基本包)和干净数据库(Oracle 11gR2 XE)之间生成差异。最后,JPA-2.1.1应用程序通过servlet 3.1与所有(完整)程序配置)。 我使用JSON作为更改日志格式,liquibase-hibernate5(v3.6)使用liquibase-maven-plugin(v3.5.5)。 配置中使用的JPA规范版本是2.1.1。 来自POM的片段:

 org.liquibase liquibase-maven-plugin ${liquibase.mvn.plugin.version}   org.liquibase liquibase-core ${liquibase.version}   org.liquibase.ext liquibase-hibernate5 ${liquibase.hibernate.version}   org.springframework spring-beans ${spring.version}   org.springframework spring-orm ${spring.version}   org.springframework spring-context-support ${spring.version}   org.eclipse.persistence javax.persistence ${jpa.version}   javax.validation validation-api ${validation.api.version}   com.oracle.jdbc ojdbc8 ${jdbc.driver.version}   org.yaml snakeyaml ${snakeyaml.version}    src/main/resources/jdbc/schema/liquibase.properties true false     diff update     

这是我目前的liquibase.properties:

 url: jdbc:oracle:thin:@localhost:1521/xe username: db_user password: password driver: oracle.jdbc.OracleDriver referenceUrl: hibernate:spring:org.example.something.entities?dialect=org.hibernate.dialect.Oracle10gDialect changeLogFile: src/main/resources/jdbc/schema/db-changelog.json diffChangeLogFile: src/main/resources/jdbc/schema/db-changelog.json outputDefaultCatalog: false outputDefaultSchema: false outputFileEncoding: utf-8 

然后为了运行差异我按照惯例使用:

 mvn liquibase:diff 

所有似乎都没有错误地运行良好,并且早期的空更改日志文件填充了所有适用的更改集; 但有一个我似乎无法弄清楚的问题

实际上,我的所有实体都是按照模式进行分组和划分的(用于隔离,与微服务一起使用等等)(超出此问题的范围)。我尝试连接的数据库用户(比如说db_user)具有创建所有必要的权限所有应用程序模式中的表都将保存数据。假设schema1和schema2是下面实体的表所属的模式:

 org.example.something.entities.package1.EntityOne org.example.something.entities.package2.EntityTwo 

实体摘录:

 @javax.persistence.Entity @javax.persistence.Table(schema = "SCHEMA1", name = "TABLE1") public class EntityOne implements Serializable { // class code ommitted for brevity @javax.persistence.Entity @javax.persistence.Table(schema = "SCHEMA2", name = "TABLE2") public class EntityTwo implements Serializable { // class code ommitted for brevity 

现在,问题是当生成变更集时,它们没有关于模式名称的任何信息(由javax.persistence.Table的模式属性分配)。 这将导致所有迁移仅在db_user中执行,这在此处是不可取的。 在序列的情况下,示例代码如下:

 @Id @Column(name = "id", columnDefinition = "number(18,0)") @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "some_id-gen") @SequenceGenerator(name = "some_id-gen", schema = "SCHEMA1", initialValue = 1001, allocationSize = 1, sequenceName = "some_id_seq") private Long id; 

生成的变更集如下所示:

 { "changeSet": { "id": "1522402677220-1", "author": "os user (generated)", "changes": [ { "createSequence": { "sequenceName": "SCHEMA1.some_id_seq" } }] } } 

请注意序列名称,它表示db_user中名称为“SCHEMA1.some_id_seq”的序列,而不是“SCHEMA1”中名称为“some_id_seq”的序列。

我期望这些变更集应该代表告诉mvn liquibase:update以在各自的模式中运行DDL。 我已经尝试运行生成的变更集,每次我最终都在db_user模式中创建所有对象(我只希望更改日志和更改日志锁表显示)。

我已经通过StackOverflow和其他一些网站进行了搜索,但找不到任何与我相似的问题(解决方案或提示)。 Liquibase文档似乎也没有提供太多帮助(可能我只能看到冰山一角); 但请,有人可以帮忙吗? 或者可能会指出我错过的一些非常基本的东西。 🙁