Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';OSGI容器中的JPA持久化单元生命周期是什么?_Java_Jpa_Osgi_Openjpa_Fuseesb - Fatal编程技术网

Java 什么';OSGI容器中的JPA持久化单元生命周期是什么?

Java 什么';OSGI容器中的JPA持久化单元生命周期是什么?,java,jpa,osgi,openjpa,fuseesb,Java,Jpa,Osgi,Openjpa,Fuseesb,场景 运行在JBoss Fuse ESB中的OSGI包 以OpenJPA为实现的JPA持久化单元 JNDI引用的数据源的H2数据库 OpenJPA被指示通过SynchonriseMappings 问题 持久化单元何时启动并加载表,是否有方法影响此行为 我问这个问题的原因是,我在init上创建的数据库上运行了一些自定义SQL,我尝试使用blueprintinit方法和OSGI bundle activators调用这些数据库,但每次都没有这些表 我还尝试让运行脚本的bean依赖于EntityM

场景

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

持久化单元何时启动并加载表,是否有方法影响此行为

我问这个问题的原因是,我在init上创建的数据库上运行了一些自定义SQL,我尝试使用blueprint
init方法和OSGI bundle activators调用这些数据库,但每次都没有这些表

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

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

这是我使用JPA多年来从未注意到的行为,我想为了自己的理智理解它

这只是针对第三方服务的模拟实现,因此要求JPA在启动时创建模式并运行SQL文件