休眠和资源利用率

时间:2011-06-04 09:41:03

标签: java database hibernate

我在办公室讨论是否使用Hibernate。目前我们的代码使用纯jdbc和sql语句来获取我们需要的数据。您可以想象这会使我们的代码难以维护。我建议切换到Hibernate以使我们的代码看起来更好。但是,我们的应用程序需要具有高性能(在时间和内存利用方面)。我的同事一直认为切换到Hibernate会让我们获取不必要的数据,因此使我们的应用程序变慢并消耗更多的RAM内存。

这是真的吗?我们可以使用任何技巧吗?我可以在与同事的讨论中使用任何论据吗?

谢谢!

1 个答案:

答案 0 :(得分:5)

首先,对于大多数应用程序,在高性能和低内存之间存在权衡。如果你想要两者,你通常必须考虑其他权衡,例如像JDBC应用程序中的可维护性。

您可以向您的同事争辩说,对于所有关系,可以指定获取类型:

  • EAGER - 在加载bean时获取字段
  • LAZY - 仅在使用字段时获取字段

当bean受实体管理器控制时,会发生这种情况。如果远程获取对象,则无法进行额外的LAZY加载。 但问题是,如果Hibernate是满足您需求的解决方案,很大程度上取决于您的应用程序的性质。

如果你有一个Web应用程序和巨大的对象图,如果你使用JPA / Hibernate,那么这是一个很大的好处。像SEAM这样的东西,因此拥有实体管理器控制下的所有对象(甚至在你的JSF托管bean中)。在那里,您不必关心实际需要对象图中的字段,因此不需要在此问题中花费任何单行代码。

但如果你承担,在科学或财务计算方面,通过定制(以及大型,复杂且难以维护)的SQL语句,您可以更快地获得所需的一切。对于我的开发,如果可能的话我使用JPA(并在后端Hibernate中)。更清洁的代码对我们来说比一些微秒更快的计算时间更重要。