在 JPA / Hibernate 启动之前引导 EJB3 应用程序
Posted
技术标签:
【中文标题】在 JPA / Hibernate 启动之前引导 EJB3 应用程序【英文标题】:Bootstrap EJB3 application before JPA / Hibernate startup 【发布时间】:2014-10-22 20:28:08 【问题描述】:我有一个 EJB3 项目(JAR 的 EAR 打包,没有 WAR),我正在尝试将 Flyway(数据库迁移)集成到其中。
我尝试了几个选项来创建一个钩子,我可以在其中运行代码,然后 Hibernate 开始执行它的操作(绑定到实体等);
使用@StartUp
注释。不幸的是,这会在 JPA 启动后运行。
ServletContextListener
/@WebListener
。但是当然你需要一个WEB-INF/
目录才能工作。
查看了使用 @DependsOn
注释来查看是否可以让类在 Hibernate 之前运行,但无法使其正常工作。
我目前使用的是 Hibernate 3.6,因此无法选择使用 Hibernate 4(因此获得 Integrator
API)。
我还有其他选择吗?
【问题讨论】:
【参考方案1】:我确实认为,如果您不想启动 JPA,则需要将 RESOURCE_LOCAL 事务与非 jta-datasource 一起使用。
如果您使用任何类型的 JTA 事务,JPA 将被急切地调用。
这样,JPA 只会在您启动事务时被调用,但您需要手动控制它。
【讨论】:
以上是关于在 JPA / Hibernate 启动之前引导 EJB3 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
JPA Spring Boot Hibernate Rest API:为啥Hibernate在插入之前会删除?
Spring,JPA,Hibernate,Atomikos - 奇怪的启动错误
如何在不依赖数据库的情况下使用 Hibernate 5 (JPA) 启动 Spring Boot Application 2?