在单独的jar中打开JPA mappedsuperclass
我们正在尝试使用在实体之间具有公共字段的实体构建一些服务。为了处理这个问题,我们采取的方法是定义一个包含所有公共字段的基类,并从中扩展所有其他字段 基类定义为映射的超类,派生类是常规实体。在类级别,实体扩展了基类 为了保持其模块化,我们在一个公共项目(基于maven)中定义了基类,并在依赖于该公共项目的独立项目中的实体中定义了基类 问题是它没有识别/解析mappedsuperclass。无法解析常见映射 所以,我的问题是,无论我在这里尝试做什么,它是否符合JPA规则/规范 如果我在与具体映射xml相同的映射xml中定义mappedsuperclass,它就可以正常工作。但我必须在每个项目中重复这一点,我想避免这样做 下面是一些类和映射的代码片段 这里还要注意,公共映射超类还定义了一个公共主键,即。身份证 基类:在单独的jar中打开JPA mappedsuperclass,jpa,orm,openjpa,mappedsuperclass,Jpa,Orm,Openjpa,Mappedsuperclass,我们正在尝试使用在实体之间具有公共字段的实体构建一些服务。为了处理这个问题,我们采取的方法是定义一个包含所有公共字段的基类,并从中扩展所有其他字段 基类定义为映射的超类,派生类是常规实体。在类级别,实体扩展了基类 为了保持其模块化,我们在一个公共项目(基于maven)中定义了基类,并在依赖于该公共项目的独立项目中的实体中定义了基类 问题是它没有识别/解析mappedsuperclass。无法解析常见映射 所以,我的问题是,无论我在这里尝试做什么,它是否符合JPA规则/规范 如果我在与具体映射xm
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。