Java datanucleus/JDO(与许多不同类的关系)

Java datanucleus/JDO(与许多不同类的关系),java,metadata,jdo,datanucleus,Java,Metadata,Jdo,Datanucleus,我需要创建一个包含两种“模块”的数据库 以领域为中心的类 元数据类 在第一组中,它只是简单或复杂的关系数据库。第二个“块”是元数据类,它从第一个块收集有关类的信息 我所做的: 创建的实体类是所有fro第一部分的父级: @PersistenceAware @Inheritance(strategy = InheritanceStrategy.NEW_TABLE) public abstract class Entity implements Serializable { private stati

我需要创建一个包含两种“模块”的数据库

以领域为中心的类 元数据类 在第一组中,它只是简单或复杂的关系数据库。第二个“块”是元数据类,它从第一个块收集有关类的信息

我所做的:

创建的实体类是所有fro第一部分的父级:

@PersistenceAware
@Inheritance(strategy = InheritanceStrategy.NEW_TABLE)
public abstract class Entity implements Serializable {
private static final long serialVersionUID = 1L;
}
创建了所有实体都继承实体类的普通模式

创建InternalMapping类作为整个概念的父级

@PersistenceCapable
@Inheritance(strategy = InheritanceStrategy.NEW_TABLE) 
public abstract class InternalMapping implements Serializable {
private static final long serialVersionUID = 1L;
private Entity entity;
//.. cut off getter and setter
}  
已创建应具有该功能的InternalMapping子级

最后我发现它不起作用。可能是因为实体没有任何字段。但如果是这样,我希望有两个字段:主键和类名。这样,我将通过两个坐标映射每个实体:ID和类名

你知道如何解决这个问题吗?JDOQL的最终外观


另外,我知道RDBMS并不是解决这类问题的最佳方案,但与我共事的人希望拥有关系数据库。

最终我找到了解决问题的方案。我能够将不同类的实体保存在一个表中。此外,我还能够通过过滤特定类的实例来执行JDOQL请求

该示例位于GitHub存储库中:以及metalink分支中。它是从datanucleus示例中稍微修改的教程项目

所以

继承层次结构中的最低级别是核心接口,其中定义了PK

类MyIndex收集核心接口的不同实现,即书籍和产品。此外,我还添加了名为type的新列,仅用于存储类名。我能够检索核心接口的实现,并根据类型字段构建查询过滤器,因为BookSimple的查询类型核心实例不起作用。这就是我在解决方案中使用的身份映射策略的功能:


另外,如果您运行命令mvn-Pschema gen compile,您将收到DDL文件。

非常感谢各位提供文本版本。看起来好多了。什么不起作用?创建模式?在这种情况下,日志会说什么?JDOQL用于什么?这个类名来自哪里?您尚未定义鉴别器。创建的架构在内部映射端没有正确的字段。然而,我考虑过这一点,并可能找到了使用AOP的解决方案。明天考试后,我将介绍更多内容。