如何在Wildfly 11 / Hibernate

时间:2017-12-15 20:04:24

标签: hibernate validation jpa java-ee hbm2ddl

我在Java Web项目中使用JPA持久性,该项目在Wildfly 11上运行。它使用的是Hibernate 5.1。有时数据库模式会发生变化,我会非常小心地更改生产数据库,就像更改实体的Java代码一样。

但是,我需要能够在应用程序启动之前运行更新脚本。运行后,数据库应处于正确的状态。

所以我添加了一个@Singleton@Startup的bean。该bean负责很好地更新模式。它会检测当前的数据库版本并选择正确的更新脚本。

由于我正在手动修改实体的Java代码并手动执行更新脚本,所以我想有办法验证我的工作。我知道我可以激活hibernate.hbm2ddl.auto并将其设置为validate。但是我的更新脚本不起作用,因为在这种情况下,验证会在架构更新之前进行。理想情况下,我希望在完成所有更新后,在该类中手动运行验证。

我尝试使用org.hibernate.tool.hbm2ddl.SchemaValidator,但我需要一个org.hibernate.boot.Metadata的实例,但我无法将其从EntityManager中删除。所以,如果有人能告诉我如何实现这一目标,那么这可能会解决这个问题。我得到了org.hibernate.service.ServiceRegistry

我还尝试添加另一个持久性单元,一个没有验证,一个hibernate.hbm2ddl.auto设置为validate,但事实证明,此设置是全局的,并且所有单元都将启用验证或没有。也许我做错了,但无论如何我认为这是一个不受欢迎的解决方案。但仍然,总比没有好。

也许还有一些我可以用来验证数据库模式的库。我看了一下Liquibase,但似乎控制了一切,并没有根据数据库验证JPA。

也许我开发这种应用程序的整个方法并不理想,但我想,我确实需要控制我的数据库以及实体。

欢迎任何提示!提前谢谢。

0 个答案:

没有答案