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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/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
在单独的jar中打开JPA mappedsuperclass_Jpa_Orm_Openjpa_Mappedsuperclass - Fatal编程技术网

在单独的jar中打开JPA mappedsuperclass

在单独的jar中打开JPA mappedsuperclass,jpa,orm,openjpa,mappedsuperclass,Jpa,Orm,Openjpa,Mappedsuperclass,我们正在尝试使用在实体之间具有公共字段的实体构建一些服务。为了处理这个问题,我们采取的方法是定义一个包含所有公共字段的基类,并从中扩展所有其他字段 基类定义为映射的超类,派生类是常规实体。在类级别,实体扩展了基类 为了保持其模块化,我们在一个公共项目(基于maven)中定义了基类,并在依赖于该公共项目的独立项目中的实体中定义了基类 问题是它没有识别/解析mappedsuperclass。无法解析常见映射 所以,我的问题是,无论我在这里尝试做什么,它是否符合JPA规则/规范 如果我在与具体映射xm

我们正在尝试使用在实体之间具有公共字段的实体构建一些服务。为了处理这个问题,我们采取的方法是定义一个包含所有公共字段的基类,并从中扩展所有其他字段

基类定义为映射的超类,派生类是常规实体。在类级别,实体扩展了基类

为了保持其模块化,我们在一个公共项目(基于maven)中定义了基类,并在依赖于该公共项目的独立项目中的实体中定义了基类

问题是它没有识别/解析mappedsuperclass。无法解析常见映射

所以,我的问题是,无论我在这里尝试做什么,它是否符合JPA规则/规范

如果我在与具体映射xml相同的映射xml中定义mappedsuperclass,它就可以正常工作。但我必须在每个项目中重复这一点,我想避免这样做

下面是一些类和映射的代码片段

这里还要注意,公共映射超类还定义了一个公共主键,即。身份证

基类:

public class BaseEntity {
    String id;
    String status;    
    Date createdDate;
    String createdBy;
    Integer versionNumber;

    //getters and setters for these fields
}
为基类映射xml

<entity-mappings>
    <package>mypackage</package>
    <mapped-superclass class="mypackage.BaseEntity">
        <attributes>
            <id name="id">
                <column name="ID" />
            </id>           
            <basic name="status">
                <column name="STATUS"/>
            </basic>
            <basic name="createdDate">
                <column name="CREATED_DT" />
            </basic>
            <basic name="createdBy">
                <column name="CREATED_BY" />
            </basic>
            <version name="versionNumber">
                <column name="VERSION_NUMBER" />
            </version>
        </attributes>
    </mapped-superclass>
</entity-mappings>
具体实体的映射

public class MyEntity extends BaseEntity {

    String name;
    String address;

    //getters and setters
}
<entity-mappings>
    <package>mypkg2</package>

    <entity class="mypkg2.MyEntity" name="MyEntity">                
        <table name="MYENTITY"/>

        <attributes>    
            <basic name="name">
                <column name="NAME"/>       
            </basic>

            <basic name="address">
                <column name="ADDRESS"/>        
            </basic>
        </attributes>
    </entity>

</entity-mappings>
<persistence>
    <persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <mapping-file>META-INF/jpa/MyEntityMappings.xml</mapping-file>
        <properties>
            <property name="openjpa.RuntimeUnenhancedClasses" value="supported"/> 
        </properties>
    </persistence-unit>
</persistence>

mypkg2
具体实体的持久性xml

public class MyEntity extends BaseEntity {

    String name;
    String address;

    //getters and setters
}
<entity-mappings>
    <package>mypkg2</package>

    <entity class="mypkg2.MyEntity" name="MyEntity">                
        <table name="MYENTITY"/>

        <attributes>    
            <basic name="name">
                <column name="NAME"/>       
            </basic>

            <basic name="address">
                <column name="ADDRESS"/>        
            </basic>
        </attributes>
    </entity>

</entity-mappings>
<persistence>
    <persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <mapping-file>META-INF/jpa/MyEntityMappings.xml</mapping-file>
        <properties>
            <property name="openjpa.RuntimeUnenhancedClasses" value="supported"/> 
        </properties>
    </persistence-unit>
</persistence>

org.apache.openjpa.persistence.PersistenceProviderImpl
META-INF/jpa/MyEntityMappings.xml
编辑:(根据Dkostubh的建议)

如果我在我的基本实体上使用注释,它就会工作。我将派生实体的映射保留在XML中

但是,我希望保持映射的一致性,并希望使用XMLs对其进行定义。为什么它与注释一起工作,而不与XML映射一起工作


可以将基类保存在单独的jar中,但需要在相同的persistence.xml中定义它


现在来谈谈不为每个映射xml重复映射的问题,您可以更好地在基本实体上使用注释。这样您就不需要重复映射xml。

您可以将基类保存在单独的jar中,但需要在相同的persistence.xml中定义它


现在来谈谈不为每个映射xml重复映射的问题,您可以更好地在基本实体上使用注释。这样您就不必重复映射xml。

谢谢您的回复。如果我在基类上使用注释,它就可以工作。但我想保持映射的一致性,即对所有映射使用xml。我想知道为什么它只适用于注释而不适用于xml。谢谢您的回复。如果我在基类上使用注释,它就可以工作。但我想保持映射的一致性,即对所有映射使用xml。我想知道为什么它只适用于注释而不适用于xml。