1

设想

  • 在 JBoss Fuse ESB 中运行的 OSGI 包
  • 以 OpenJPA 作为实现的 JPA 持久性单元
  • JNDI 引用的数据源的 H2 数据库
  • OpenJPA 指示通过SynchonriseMappings

问题

持久性单元何时启动并加载表,有没有办法影响这种行为?

我问这个的原因是我有一些自定义 SQL 可以在 init 上创建的数据库上运行,我尝试使用蓝图init-method和 OSGI 捆绑激活器调用它,但每次表都不在那里。

我还尝试使运行脚本的 bean 依赖EntityManager但又没有乐趣。我什至尝试使用第一条消息作为触发器进行延迟加载,以确保捆绑包在尝试之前完全启动,并且表还不存在。

我可以使它工作的唯一方法是对实体进行虚拟调用,例如,entityManager.find(MyEntity.class, -1);在我的 SQL 之前,我通过 an 来执行此操作,init-method但我确信它也可以在激活器中工作。

这是我在使用 JPA 多年以来从未注意到的行为,并且出于我自己的理智想了解它。

这只是用于 3rd 方服务的模拟实现,因此奇怪的要求是让 JPA 创建模式并在启动时运行 SQL 文件。

4

0 回答 0