关于Hibernate和ORM与Oracle的使用的几个问题

时间:2010-06-29 12:19:21

标签: java hibernate orm

我正在考虑编写一个工具,列出oracle数据库中的所有表。单击每个表的任何链接将加载该表中的数据。

通常我只是在代码中使用普通的旧jdbc和标准的sql查询或存储过程。到目前为止,这对我来说工作正常,但我想知道如果使用hibernate将有助于减少工作量。这也是学习hibernate的好方法。

如果hibernate可以提供帮助以及如何帮助,请告诉我。我可以想到以下推理

  • 无需编写查询
  • 无需管理查询
  • 管理交易可能会更容易。

还有一些问题我不确定答案是什么。例如,我将使用的数据库已经很老了,并非所有表都有主键。阅读有关hibernate的教程,出现了以下问题

  • 所有表都必须有一个名为“id”的主键吗?我的表中没有一个名为id的列。主键被命名为其他
  • 表必须有主键吗?并非所有表都有主键。特别是有常设数据的表格。
  • 某些表将主键作为复合键(主键由2列组成)。这些会被允许吗?

我也会对任何简单的教程感兴趣。我见过一对夫妇,但没有一个是打算让新手去做。

由于


有人可以提供hibernate变得非常宝贵的情况/示例场景

由于

4 个答案:

答案 0 :(得分:6)

我认为Hibernate会增加你的工作量。 ORM表示对象,因此您必须编写对象以将Oracle表映射到。

我认为这不适合使用Hibernate。 JDBC适用于这种情况。如果您想学习Hibernate,请务必继续学习,但我可以考虑一些更合适的小问题。

答案 1 :(得分:2)

将Hibernate视为投资。就像学习西班牙语或武术一样。一开始很难,但是经过这次考验后,你将获得巨大的收益。

回答你的问题:

  • 您可以使用Hibernate所需的任何主键

  • Hibernate不支持没有主键的表,但为什么你会想要呢?

  • 支持复合键

考虑在Action中购买Hibernate。从那里开始。

答案 2 :(得分:2)

  

通常我只是在代码中使用普通的旧jdbc和标准的sql查询或存储过程。到目前为止,这对我来说还不错,但我想知道使用hibernate是否有助于减少工作量。

使用JDBC实现这一点非常简单,如果使用DatabaseMetaDataResultSetMetaData动态执行操作,则不需要编写许多查询。

使用Hibernate,您必须从物理模型生成实体。这是可能的,Hibernate为此提供了工具。但是我不相信Hibernate会给你带来任何好处(不是CRUD应用程序,JDBC会起作用)。所以我同意@duffy,Hibernate甚至可能会给你更多的工作。

  

这也是学习hibernate的好方法。

我能理解。但在我看来,这不是学习Hibernate的最佳应用程序。

  

所有表都必须有一个名为“id”的主键吗?我的表中没有一个名为id的列。主键名为其他

不,这不是必需的,您可以将任何列名映射为主键。

  

表必须有主键吗?并非所有表都有主键。特别是有常设数据的表格。

如果您没有任何唯一列,那么这将是一个问题,Hibernate希望实体具有标识符。

  

某些表将主键作为复合键(主键由2列组成)。

支持。

答案 3 :(得分:0)

在某些情况下,我们选择对主键使用唯一约束来提高性能,尤其是在与任何其他表无关的表上。在某些情况下,我们避免使用主键,甚至规范化表以防止创建唯一索引,并且在发生更改时需要Oracle更新和重新计算索引。

我不是dba,我知道有几个支持和反对使用主键的论据,但我现在真的不想进入。

说实话,我想使用hibernate的原因纯粹是为了我自己的利益,因为我想学习如何使用它。鉴于我有机会编写这个工具,并且它不是一个关键任务工具,只会在“内部”使用我决定我应该尝试休眠并通过学习它我可能会发现它有用,如果我需要它在其他项目上。

我目前没有要求写入数据库,所以生病只能从数据库中读取。由于并非所有表都有主键,是否可以使用唯一列作为主键来欺骗休眠?我认为有可能创建VIEWS并在视图中为没有主键或唯一约束的表添加id列。