将java语言映射到数据库

时间:2012-05-28 05:14:43

标签: java database schema

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

因此,例如,对于类型,我想要表达一定数量的关系。例如,Java中有两种类型,基本类型和引用类型,原始类型分解为数字,布尔和数字分解为整数和浮点类型,而整数分解为字节短整数long,char和浮点类型分解浮动和双重(我认为我做对了)。

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

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

有这样的事吗?我在谷歌中没有任何用处,因为很难编写一个不会让你陷入JDBC和Hibernate领域的查询。不过,我认为有人必须已经这样做了;也许甚至有一个我不知道的标准或RFC。

我不想要的是试图对hibernate之类的东西进行逆向工程。我认为这实际上是一个很小的任务,收益很少。这并不是说我不能从头开始(在通常的错误启动和错误发生之后),这就是我想知道它是否还没有完成并在某个地方指出。

非常感谢。

4 个答案:

答案 0 :(得分:2)

Object-Relational Impedance Mismatch是一个难题。 如果您不想深入了解Hibernate或其他ORM层,试图找出他们是如何做到的,你将不得不自己重新发明轮子。

我们可以提出概念表示,例如Object表......你可以使用像Hibernate一样的继承策略。但是如果你想捕获方法,你将不得不弄清楚(一个方法 - 对象关系?)如果你想捕获@Override的能力,你将不得不弄明白。注释?等等。

  

“我想在数据库模式中表示一些java概念......我   我认为这实际上是一项很少付出的大任务。“

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

答案 1 :(得分:0)

  

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

不是你的意思。这个轮子以前是在各种ORM制图产品中发明的,但我不知道有谁独立于这样的产品。 (为什么有人会有动力做到这一点?不像有100个项目可以利用这项工作......)

答案 2 :(得分:0)

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

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

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

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

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

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

根据您对此进行建模的原因,您可能需要第四个表“classes”作为类变量,可以显示基本类型可以出现在Java程序中的大多数位置。

答案 3 :(得分:0)

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

[Argo][1] and [Papyrus][2] look promising.