我有使用 JPA 的代码,并且在我的开发环境和单元测试中一切正常。但是将我的模块部署到 OSGi 目标环境中时,我经常遇到最奇怪的类加载问题。我真的很喜欢 OSGi,但如果我不能一劳永逸地解决这个问题,我会发疯的。只要我不明白哪些类需要被哪些其他类看到,我就永远不会正确设置 OSGi 的东西。
因此,据我所见,我有以下项目可能会或可能不会从某些正在运行的代码中看到,我们称它们为“主题”:
- JPA 注释实体类
- 一种
persistence.xml
- 持久性 API
javax.persistence
- 持久性提供者类
我的代码中有以下情况:
- 创建一个
EntityManagerFactory
和一个EntityManager
- 实例化新的实体对象
- 将这些对象传递给
EntityManager
以将它们放入其持久性上下文中 - 继续使用它们,偶尔要求 EntityManager 保存更改
- 实例化、使用和丢弃实体对象,而无需将它们保存到数据库或以其他方式显式调用 EntityManager 的方法
- 而不是实例化实体对象,而是要求 EM 从数据库中加载它们,这会导致实例化发生在我看不到的地方。
- 使用、更改、保存和丢弃这些实例
那么,在上述哪种情况下,我需要哪些主体可见?
我想这可能很明显
- 持久性提供者和实体类需要知道 javax.persistence
- 创建 EntityManager 的代码需要查看 javax.persistence (我猜是持久性提供程序,尽管这在我自己的任何代码中都没有直接可见)