0

我想在数据库模式中表示一些 Java 概念。我不是说将实例持久化到 Hibernate 中,我的意思是将 java 的类型系统表示为一系列表和行。

因此,例如,关于类型,我想代表一组确定的关系。例如,Java中有两种类型,原始类型和引用类型,原始类型分解为数字和布尔类型,数字分解为整数和浮点类型,整数分解为字节短整数和浮点类型进入 float 和 double (我想我是对的)。

Java 也有类,类有方法,方法有签名和构造函数,返回类型和参数,两者都有一些类型。

所以我想创建一个以 3NF 形式表示此类信息的数据库。这样的数据库将允许查询对象实例,这些对象实例将是放入数据库的数据。

有这样的吗?我在 Google 中没有找到任何有用的东西,可能是因为很难编写一个不会让您进入 JDBC 和 Hibernate 领域的查询。不过,我认为一定有人已经这样做了。也许甚至还有我不知道的标准或 RFC。

我不想要的是尝试对休眠或类似的东西的某些方面进行逆向工程。我认为这实际上是一项艰巨的任务,回报很少。并不是我不能从头开始(在通常的错误开始和错误发生之后),而是我想知道它是否还没有完成并在某个地方指定。

非常感谢。

4

4 回答 4

2

对象关系阻抗不匹配是一个难题。如果您不想深入研究 Hibernate 或其他 ORM 层来试图弄清楚他们是如何做到的,那么您将不得不自己重新发明轮子。

我们可以提出概念表示,例如 Object 表……您可以使用 Hibernate 使用的继承策略。但是,如果您想捕获方法,则必须弄清楚(方法-对象关系?)如果您想捕获@Override 的能力,则必须弄清楚这一点。注释?等等等等。

“我想在数据库模式中表示一些 Java 概念……我认为这实际上是一项回报甚微的大任务。”

我想你回答了你自己的问题。您可能想问的问题是:“对于我真正想做的事情,是否有更好的方法?”

于 2012-05-28T05:20:03.573 回答
0

这是我想知道它是否还没有完成并在某个地方指定。

不是你的意思。这个轮子之前已经在各种 ORM 映射产品中发明过,但我不知道有谁独立于这种产品做过。(为什么会有人这样做?它不像有 100 个项目可以利用这项工作......)

于 2012-05-28T06:22:41.220 回答
0

谷歌为“子类型”“超类型”建模。

您的问题听起来需要两个或三个级别的子类型。

一个名为“fields”的表,它包含所有类型名称、长度、它所属的类等共有的属性。

一个名为“text_fields”的表,其中包含所有文本类型字段共有的属性。

一个名为“numeric_fields”的表,其中包含数字字段共有的所有属性。浮动或固定的指标,可能是最大值和最小值等。

因此,对于每个字段,您将名称等存储为“字段”表中的一行,其余数据存储在“text_fields”或“numeric_fields”表中。

根据您建模的原因,您可能需要第四个表“类”,因为类变量可以出现在 Java 程序中基本类型可以出现的大多数地方。

于 2012-05-28T06:46:32.630 回答
0

另一个答案!我一夜之间就在考虑这个问题,我突然想到,任何 UML 建模工具都必须在内部准确地存储这种数据,以支持漂亮的图形和箭头。

[Argo][1] and [Papyrus][2] look promising.
于 2012-05-29T01:38:59.443 回答