我有一个EJB3项目(JAR的EAR封装,没有WAR),我正试图将Flyway(数据库迁移)集成到其中。
我尝试了几个选项来创建一个钩子,在Hibernate开始做它的事情(绑定到实体等)之前,我可以在那里运行代码;
- 使用
@StartUp
注释。不幸的是,这会在JPA启动后运行 ServletContextListener
/@WebListener
。但当然,您需要一个WEB-INF/
目录才能正常工作- 考虑过使用
@DependsOn
注释,看看我是否可以在Hibernate之前运行一个类,但无法实现 - 目前我使用的是Hibernate 3.6,因此切换到Hibernate 4(从而获得
Integrator
API)并不是一个真正的选择
我还有其他选择吗?
我确实认为,如果您不想启动JPA,则需要使用具有非jta数据源的RESOURCE_LOCAL事务。
如果使用任何类型的JTA事务,JPA都会被急切地调用。
像这样,JPA只会在启动事务时被调用,但您需要手动控制它。