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 ...