Hibernate 在osgi捆绑包之间共享JPA数据源

Hibernate 在osgi捆绑包之间共享JPA数据源,hibernate,jpa,osgi,spring-data-jpa,apache-karaf,Hibernate,Jpa,Osgi,Spring Data Jpa,Apache Karaf,我有这样的情况: 一个SQL数据库实例 两个或多个osgi捆绑包,带有jpa实体和spring数据存储库,用于“他们的”实体 其中一个“jpa捆绑包”是“核心捆绑包”,其他的依赖于它(插件捆绑包) 我可以将其用于单个数据源吗 例如: “核心包”包含个人实体 “Person list plugin bundle”包含一个PersonList实体,该实体通过people属性引用Person实体 现在,我想使用“个人列表插件包”中的PersonListService,该包使用PersonLis

我有这样的情况:

  • 一个SQL数据库实例
  • 两个或多个osgi捆绑包,带有jpa实体和spring数据存储库,用于“他们的”实体
  • 其中一个“jpa捆绑包”是“核心捆绑包”,其他的依赖于它(插件捆绑包)
我可以将其用于单个数据源吗

例如:

  • “核心包”包含
    个人
    实体
  • “Person list plugin bundle”包含一个
    PersonList
    实体,该实体通过
    people
    属性引用Person实体
现在,我想使用“个人列表插件包”中的
PersonListService
,该包使用
PersonListRepository.findByPeoplesFirstName(String firstName)

背景是,我希望我的应用程序的数据库可以通过添加一个osgi包作为插件来扩展


现在我正在试用ApacheKaraf和Hibernate5,因为空间支持很重要。

在OSGi中,建议JPA EntityManager的所有实体都驻留在同一个捆绑包中。您可以从一个可以查看所有实体的捆绑包中创建EntityManager,但这不适用于您想要的插件模型

无论如何,在数据库端创建一个生成多个bundle的模型可能会产生不必要的耦合。您应该研究DDD概念中的有界上下文,并创建持久性上下文来实现每个有界上下文

插件模型与数据库不太兼容,因为数据库通常需要一个非常静态的结构,而插件可能在运行时来来去去去


当然,您可以共享数据源,但这是在jdbc级别上,而不是在jpa级别上。

我害怕这个答案,但是这些想法行得通吗:每个“jpa包”都导入它需要的数据源,并创建自己的持久性上下文?我不能将对象从一个包共享到另一个包,但仍然使用实体和服务定义?我认为这不起作用。原因是EntityManager将具有不同的缓存,但会有效地写入同一数据库。当然,您可以共享一些基类,但每个EntityManager都应该写入不同的表。您为什么还要使用“插件”?例如,如果您有一个Person实体,那么所有处理Person的存储库类都应该在同一个包中。我认为将实体和它们的存储库分开是没有意义的。我想替换一个遗留应用程序,用户可以通过添加一个带有php代码的文件夹来安装一个“插件”,现在有一个“缓存生成器插件”,它向数据库添加一些预先计算的表。这需要访问它自己的表和“核心”表。