Inheritance 如何在使用@Element注释时映射子类列表';父类中的列?

Inheritance 如何在使用@Element注释时映射子类列表';父类中的列?,inheritance,orm,jdo,datanucleus,Inheritance,Orm,Jdo,Datanucleus,我有一个有两个不同列表的类。每个列表都使用不同的类作为泛型类型。这些类共享相同的基类。当我试图持久化包含这两个列表的类时,我得到一个错误,说明@Eelement注释中指定的列在每个子类中都不存在。但此列存在于父类中。那么,我如何告诉datanucleus此列位于父类而不是子类中 基类: @PersistenceCapable(table = "Z") @Inheritance(strategy = InheritanceStrategy.NEW_TABLE) public abstract cl

我有一个有两个不同
列表的类。每个
列表都使用不同的类作为泛型类型。这些类共享相同的基类。当我试图持久化包含这两个列表的类时,我得到一个错误,说明
@Eelement
注释中指定的列在每个子类中都不存在。但此列存在于父类中。那么,我如何告诉datanucleus此列位于父类而不是子类中

基类:

@PersistenceCapable(table = "Z")
@Inheritance(strategy = InheritanceStrategy.NEW_TABLE)
public abstract class Z {
    @Persistent(primaryKey = "true", valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;
儿童班

@PersistenceCapable(table = "X")
@Inheritance(strategy = InheritanceStrategy.NEW_TABLE)
public class X extends Z {

@PersistenceCapable(table = "Y")
@Inheritance(strategy = InheritanceStrategy.NEW_TABLE)
public class Y extends Z {
我试图坚持的课程:

@PersistenceCapable(table = "MyClass")
public class MyClass {
    @Persistent(column = "id", primaryKey = "true", valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;
    // Specifies the FK column pointing to this object (ie. MyClass)
    @Element(column = "myclass_id")
    @Order(extensions = @Extension(vendorName = "datanucleus", key = "list-ordering", value = "order ASC"))
    private List<X> xList;

    // Specifies the FK column pointing to this object (ie. MyClass)
    @Element(column = "myclass_id")
    @Order(extensions = @Extension(vendorName = "datanucleus", key = "list-ordering", value = "order ASC"))
    private List<Y> yList;
那么Z中的
“myClass”
字段在做什么呢?也许它应该是双向关系的一部分?在这种情况下,应在所有者侧(列表)指定mappedBy。作为双向关系的一部分是使用Z中的该列存储列表关系的FK的唯一方法


此外,Z中没有“顺序”字段(指定为列表的一部分),因此该部分也不起作用。

Z
类中实际具有
myClass
,这是一个错误。我现在把它拆了。实际上,
order
group\u id
列位于
Z
类的表中。但例外是在基类
X
&
Y
中找不到它们,也无法创建这些列,因为我没有将Datanucleus配置为自动创建列。你的意思是像消息中首先说的那样?所以我应该在那里创建它?我正在根据现有的设计映射我的对象,所以我试图遵守它,而不是编辑它,这将增加很多工作。添加列是一个选项,但这是我的最后一个选项。你是说我必须在
Z
MyClass
之间建立双向关系吗?你说你没有配置DataNuceus来自动创建列。。。这就是异常中的消息告诉您要做的事情(因此,请遵循这些说明)。你是否在Z有MyClass取决于你。。。它是单向的还是双向的?JDO不会把这强加给你。。。这是你的模型我想在
MyClass
Z
之间建立单向关系。而
myclass_id
列不在Z的表中,它在它的子类表中,
X
&
Y
,Datanucleus希望它在
Z
中。这是可调的吗?
Required columns missing from table "ipk.x" : myclass_id. Perhaps your MetaData is incorrect, or you havent enabled "datanucleus.schema.autoCreateColumns".
org.datanucleus.store.rdbms.exceptions.MissingColumnException: Required columns missing from table "ipk.x" : myclass_id. Perhaps your MetaData is incorrect, or you havent enabled "datanucleus.schema.autoCreateColumns".
    at org.datanucleus.store.rdbms.table.TableImpl.validateColumns(TableImpl.java:277)
    at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.performTablesValidation(RDBMSStoreManager.java:3421)
    at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.addClassTablesAndValidate(RDBMSStoreManager.java:3218)
    at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.run(RDBMSStoreManager.java:2871)
    at org.datanucleus.store.rdbms.AbstractSchemaTransaction.execute(AbstractSchemaTransaction.java:119)
    at org.datanucleus.store.rdbms.RDBMSStoreManager.manageClasses(RDBMSStoreManager.java:1608)
    at org.datanucleus.store.rdbms.RDBMSStoreManager.getDatastoreClass(RDBMSStoreManager.java:678)
    at org.datanucleus.store.rdbms.RDBMSPersistenceHandler.getDatastoreClass(RDBMSPersistenceHandler.java:88)
    at org.datanucleus.store.rdbms.RDBMSPersistenceHandler.insertObject(RDBMSPersistenceHandler.java:123)
    at org.datanucleus.state.StateManagerImpl.internalMakePersistent(StateManagerImpl.java:3489)
    at org.datanucleus.state.StateManagerImpl.makePersistent(StateManagerImpl.java:3465)
    at org.datanucleus.ExecutionContextImpl.persistObjectInternal(ExecutionContextImpl.java:2031)
    at org.datanucleus.ExecutionContextImpl.persistObjectWork(ExecutionContextImpl.java:1874)
    at org.datanucleus.ExecutionContextImpl.persistObject(ExecutionContextImpl.java:1722)
    at org.datanucleus.api.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:722)
    at org.datanucleus.api.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:747)
    at ...