在OSGi中使用Hibernate而不定义要扫描属性的包/类
我有以下情况:在OSGi中使用Hibernate而不定义要扫描属性的包/类,hibernate,osgi,hibernate-mapping,spring-orm,Hibernate,Osgi,Hibernate Mapping,Spring Orm,我有以下情况: Project A - Contains a DB-Configurations and Creates Session_Factory at Init. Project B - Contains entities and using Project A to persist entities. Project C - Contains entities and using Project A to persist entities. 我正在使用karaf在基于OSGi的环境中
Project A - Contains a DB-Configurations and Creates Session_Factory at Init.
Project B - Contains entities and using Project A to persist entities.
Project C - Contains entities and using Project A to persist entities.
我正在使用karaf在基于OSGi的环境中工作。我正在制作小组件/捆绑包,它们使用项目A来持久化它们的实体。项目A将始终首先加载,因为其他项目都依赖于它
项目A将在开始时启动会话工厂,但没有任何包/类来扫描实体
现在,任何试图使用项目A持久化对象的包都会出现异常,这是显而易见的
org.hibernate.MappingException:未知实体:
是否有任何方法可以在不扫描任何包/类的情况下持久化实体…?SessionFactory必须在持久化之前了解实体。在您的例子中,如果将一些类从B和C注册到A,SessionFactory可能会存储对这些类的一些引用,从而破坏模块性 我给你的建议是:
Hibernate不能很好地与OSGi配合使用。请参阅 EclipseLink通过双子座项目支持OSGi,但也有类似的限制:
Apache Aries JPA允许您通过清单中的元持久性头为每个捆绑包创建一个PersistenceUnit:。这可能允许您在捆绑包B和C之间共享项目A中的persistence.xml,但我想这仍然会创建两个不同的PersistenceUnits/sessionFactorys。我正在做与您提到的相同的事情,但唯一的区别是项目A将数据源公开为服务。项目B和C正在使用该服务并将其发送到项目A的Dao类,以从该数据源创建会话工厂。我们只想创建一个会话工厂,它可以持久化所有项目中的所有实体。非常感谢你的回复。如果您对此有任何解决方案,请务必回复。为什么“只有一个会话工厂”?基本上,我们正在开发小型捆绑包中的用例。有可能50个用例最终会形成50个捆绑包[在OSGi(karaf)]。现在,如果50个捆绑包中有30个使用数据库,那么我们将拥有30个独立的连接工厂。我不知道有多少,但这将消耗资源。这就是为什么我们想要一个单一的连接工厂的原因。会话工厂不是用来创建“连接”的,尽管它不是一个“连接工厂”。它只存储一些配置和JPA元数据,我看不出它会“消耗资源”的原因。在您的例子中,连接是从数据源(即singleton)检索的,并通过OSGi公开。关于singleton数据源,您是对的。但是我们正在使用单例数据源来创建连接工厂。以及使用Hibernate会话和事务。现在的问题是,30个bundle正在使用该单例数据源创建30个会话工厂。我们认为这是不对的。因为我们不确定将来会有多少捆绑包。