2011-06-04 60 views
1

我在办公室讨论是否使用Hibernate。目前我们的代码使用纯jdbc和sql语句来获取我们需要的数据。正如你可以想象的那样,这使得我们的代码难以维护。我建议切换到Hibernate以使我们的代码更好看。但是,我们的应用程序需要具有高性能(就时间和内存利用率而言)。我的同事们一直在争论说,转换到Hibernate会让我们获取不必要的数据,因此使我们的应用程序变得更慢,并消耗更多的RAM内存。休眠和资源利用

这是真的吗?有什么我们可以使用的技巧吗?我在与同事的讨论中可以使用哪些论据?

谢谢!

+0

我认为你应该收集支持你的观点的硬数据(同时也检查潜在的失败点),而不是进行冷水讨论。对于这样大规模的设计变革,如果你单单通过教科书进行争论,你确实可能不会赢得人们。从这里讲述经验。 – 2011-06-04 10:19:05

回答

5

首先,对于大多数应用程序而言,在高性能和低内存之间进行权衡。如果你同时想要,你通常必须考虑其他的折衷,例如可维护性就像您在JDBC中的应用程序一样。

你可以说你的同事,对于所有关系的提取类型可以指定:

  • EAGER - 取当豆装入场
  • LAZY - 获取域的域只有当被使用

这发生在bean受实体管理器控制时。如果您远程获取对象,则额外的懒惰加载是不可能的。 但问题是,如果Hibernate是您的需求的解决方案,很大程度上取决于您的应用程序的性质。

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

但是,如果你进行如科学或财务计算,通过自定义(以及庞大,复杂且难以维护)的SQL语句,您可以更快地获得所需的一切。如果可能的话,我会使用JPA(以及后端Hibernate)。更简洁的代码对我们来说比一些微秒的更快的计算时间更重要。

+1

Thor给出了很好的答案,我只是简单地补充说Hibernate可能需要比JDBC方法更多的内存,它可能会更慢或更快,具体取决于您的JDBC应用程序的编写情况,并且您始终可以调整Hibernate以仅检索您的信息请求而不是更多。 HTH – 2011-06-05 08:33:28