Java OSGI-在多个捆绑包中拆分实体

Java OSGI-在多个捆绑包中拆分实体,java,jpa,osgi,apache-karaf,Java,Jpa,Osgi,Apache Karaf,我正在制作一个运行在Karaf4.0.4上的osgi应用程序 我的应用程序使用单个PostgreSQL数据库。 连接器由pax jdbc处理。 我使用KarafJPA2.3.0特性和Hibernate4.3.6.Final特性 某些模块提供可以添加/删除的服务 TL/DR:是否有办法将我的实体拆分为多个捆绑包? 以下是我的情况: 我目前有一个名为model的模块,可以 我的persistence.xml文件 带注释的类@实体 带注释的类@Entity和@heritance(strategy=h

我正在制作一个运行在Karaf4.0.4上的osgi应用程序

我的应用程序使用单个PostgreSQL数据库。 连接器由pax jdbc处理。 我使用Karaf
JPA2.3.0
特性和
Hibernate4.3.6.Final
特性

某些模块提供可以添加/删除的服务

TL/DR:是否有办法将我的实体拆分为多个捆绑包?

以下是我的情况:

我目前有一个名为
model
的模块,可以

  • 我的
    persistence.xml
    文件
  • 带注释的类
    @实体
  • 带注释的类
    @Entity
    @heritance(strategy=heritancetype.JOINED)
  • 访问我的实体的服务
这是我的持久性文件:

<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

    <persistence-unit name="maindb" transaction-type="JTA">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=maindb)</jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <!-- <property name="hibernate.hbm2ddl.auto" value="create-drop"/> -->
        </properties>
    </persistence-unit>

</persistence>

我认为这是因为在解析第二个片段时,它会重新加载主机片段,并尝试在已经存在的entitymanager上重新映射实体(不确定)

OSGi规范4.2 127.3.2定义了持久性捆绑包。它包含一个或多个持久性单元。持久性单元中定义的所有实体都必须起源于bundle的jar。它们可能不是来自碎片


我认为理论上可以将实体类放在另一个包中,但前提是持久性包导入这些包。因此,您不能在以后以主持久性捆绑包不知道的方式使用它来扩展类。

OSGi规范4.2 127.3.2定义了持久性捆绑包。它包含一个或多个持久性单元。持久性单元中定义的所有实体都必须起源于bundle的jar。它们可能不是来自碎片


我认为理论上可以将实体类放在另一个包中,但前提是持久性包导入这些包。因此,您不能在以后以主持久性捆绑包不知道的方式使用它来扩展类。

很遗憾,它不能扩展,在我看来,这是模块化的一大损失。如果我有其他与持久性包中的实体无关的实体呢?我是否可以拥有多个持久性捆绑包,其中包含具有类似
persitence.xml
文件的不相关实体?您可以有多个持久性单元,但它们将在数据库中取消分级。我认为扩展在实践中无论如何都是行不通的,因为捆绑包来了又走了,但是数据库总是一样的。很遗憾,它不能扩展,在我看来,这对模块化来说是一个很大的损失。如果我有其他与持久性包中的实体无关的实体呢?我是否可以拥有多个持久性捆绑包,其中包含具有类似
persitence.xml
文件的不相关实体?您可以有多个持久性单元,但它们将在数据库中取消分级。我认为扩展在实践中无论如何都是行不通的,因为捆绑包来来往往,但数据库总是一样的。
public abstract class AbstractDaoService<T> implements IDaoService<T> {

    @PersistenceContext(unitName = "maindb")
    protected EntityManager entitymanager;

    protected Class<T> clazz;

    public AbstractDaoService(Class<T> clazz) {
        this.clazz = clazz;
    }

    @Override
    public T find(Object id) {
        return entitymanager.find(clazz, id);
    }

    // rest of class is omitted
}
javax.persistence.PersistenceException: [PersistenceUnit: maindb] Unable to build Hibernate SessionFactory
...
Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mapping <my class annotated with @Inheritance`>