Seam/Hibernate:JPA启动前的liquibase

gyo*_*ham 8 java hibernate weblogic seam liquibase

我有一个Java EE Web应用程序(hibernate3,seam),我在Weblogic容器中使用它.我想介绍Liquibase进行架构迁移.目前我们使用

<property name="hibernate.hbm2ddl.auto" value="update"/>
Run Code Online (Sandbox Code Playgroud)

我们想放弃它,因为它可能是危险的.

我希望迁移自动发生在部署中,所以我正在使用servlet侦听器集成.

在web.xml中,第一个侦听器是:

<listener>
    <listener-class>liquibase.integration.servlet.LiquibaseServletListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)

遗憾的是,这个监听器在Hibernate初始化之后开始运行并且它抛出了丢失的表错误(因为模式是空的).我几个小时就像老板一样疯狂,现在我有点困惑.

提前致谢

UPDATE

如果我设置<property name="hibernate.hbm2ddl.auto" value="none" />,liquibase成功完成它的工作,应用程序按预期启动.如果我设置validate,似乎hibernate模式验证发生在liquibase之前,它因为缺少表而哭泣.

UPDATE

看起来Seam初始化了Hibernate,但Liquibase监听器在SeamListener之前被列出,所以我不知道如何同时启用模式验证和liquibase ...

Sha*_*dra 1

我的理解是 LiquibaseServletListener 需要使用liquibase.changelog上下文参数传递的更改日志文件的路径。所以你已经生成了更改日志,还是我在这里遗漏了一些东西?

你可以看一下Liquibase提供的liquibase hibernate集成库。该库可与经典的 hibernate 配置(通过 .cfg 和 .xml 文件)以及通过 persistence.xml 的 JPA 配置配合使用。

AFAIK,生成变更日志和运行变更日志是两个独立的过程。Liquibase Hibernate 集成库有助于根据持久性单元中实体的当前状态和当前数据库状态的差异生成更改日志。