在 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?

jpa hibernate中扫描太多实体时,glassfish启动很慢或内存泄漏

Hibernate JPA 关联关系

Hibernate与Jpa的关系,以及使用分页和动态查询