将关系转换为面向对象的最佳方法是什么?

时间:2011-02-09 20:24:00

标签: java oop relational

自从我学习了RDBMS以来,我开始考虑关系模型而不是面向对象。现在我在尝试在Java数据结构中存储和查询数据时遇到了麻烦。

我想编写一个具有相互关联的实体集的应用程序,因此我将每个实体都设为自己的类。每个实体的属性都是实例变量。好吧,我认为到目前为止我们还不错。 TitleGame都是实体。 Game ISA Title所以Title应该是父类,而Game应该从Title继承(将游戏视为物理副本,将标题视为名称游戏)。

我的主要课程中有一组游戏,如果我想找到一个特定的游戏,我可以迭代。我怎样才能找到具体的标题?我没有一套标题,因为Title是继承的,所以我认为我应该迭代游戏,当我找到一个标题的名称时,将它添加到一个集合中,这样我才能获得唯一的标题。

游戏是可变的(isBought可以改变)所以使用Set一个坏主意?在Java中创建实体集的最佳方法是什么?使用Map而不是set来将id映射到对象?

2 个答案:

答案 0 :(得分:5)

修复对象关系差距并非易事。有ORM(对象关系映射)框架可以做到这一点。但他们有一些学习曲线。 HibernateEclipseLink是Java中ORM标准的两个实现 - JPA(java persistance API)。

答案 1 :(得分:2)

关系型和OO型之间没有根本的差距。关系数据模型是一种类型系统,它支持关系类型和关系运算符(以及其他类型)。 OO数据模型是一种支持继承的类型系统。

人们在考虑这些范例时经常犯的错误是将OO术语中的类型(类)与关系模型中的关系或元组等同起来。 Date和Darwen称之为First Great Blunder。现实比这简单得多。类型是关系模型和OO模型中的类型。这两种范式是正交的,互为补充,它们不是相互排斥的。

大肆宣传的OO / RM不匹配真正意味着程序员希望实现某些转换模式,而这些转换模式是他的软件工具不容易支持的。关系模型不应该受到责备。软件制造商是。