我們試圖用它們之間具有共同字段的實體構建一些服務。爲了處理這個問題,我們採取的方法是定義一個包含所有常用字段的基類,並從中擴展所有其他字段。Openjpa mappedsuperclass在一個單獨的jar中
基類定義爲映射超類,派生類是常規實體。在類級別,實體擴展基類。
爲了保持它的模塊化,我們已經在普通項目中定義了基類(基於maven),並且在依賴於這個公共項目的單獨項目中定義了基類。
問題是它不能識別/分析映射的超類。它無法解析通用映射。
所以,我的問題是,無論我在這裏做什麼,它是否符合JPA規則/規範。
如果我在與具體映射相同的映射xml中定義mappedsuperclass,則它工作正常。但是,我必須對每個項目都重複一遍,這是我想避免的。
下面是類和映射的一些代碼片段。
此處還要注意,通用映射超類還定義了一個公共主鍵即viz。 ID。
基類:
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>
持久性XML此
<persistence>
<persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<mapping-file>META-INF/jpa/CommonMappings.xml</mapping-file>
<properties>
<property name="openjpa.RuntimeUnenhancedClasses" value="supported"/>
</properties>
</persistence-unit>
</persistence>
這些被包裝在單獨的罐中。
混凝土實體
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>
的持久性XML爲混凝土實體
<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>
編輯:(基於dkaustubh的建議)
它適用於我在我的基本實體上使用註釋。我已經將派生實體的映射留在了XML中。
但是,我想保持映射一致,並希望使用XML來定義它。爲什麼它可以使用註釋而不是XML映射?
感謝您的回覆。如果我在我的基類上使用註釋,它會起作用。但我想保持映射一致,即對所有映射使用xml。我不知道爲什麼它可以與註釋一起使用,而不是xml。 – praveenj 2013-04-30 20:36:09