首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加速Hibernate对象创建?

加速Hibernate对象创建?
EN

Stack Overflow用户
提问于 2011-06-03 15:13:27
回答 3查看 1.5K关注 0票数 4

我们使用Hibernate作为MySQL数据库之上的ORM层。我们有相当多的模型对象,其中一些非常大(就字段的数量而言)。我们的一些查询需要从数据库中检索大量(如果不是全部)模型对象,以便对它们进行各种计算。

我们启用了延迟加载,但在某些情况下,Hibernate仍然需要大量的时间来填充对象。MySQL查询的执行时间非常快(大约几毫秒),但是Hibernate填充对象的时间很短。

有没有办法/模式/优化来加速这个过程?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-03 16:49:15

一种方法是不填充实体,而是填充某种视图对象。

假设CustomerView具有适当的构造函数,您可以这样做

代码语言:javascript
复制
select new CustomerView(c.firstname, c.lastname, c.age) from Customer c

不过,我对Hibernate填充对象的速度很慢感到有点惊讶,除非您碰巧通过级联加载关联的对象,并且忘记了一些适当的获取。

票数 2
EN

Stack Overflow用户

发布于 2011-06-04 00:26:26

也许可以考虑添加二级缓存?这不一定会加快对象实例化的速度,但可以大大降低执行此操作的频率。

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html

票数 1
EN

Stack Overflow用户

发布于 2011-07-31 05:03:17

由于您问的是与性能相关的问题,因此您可能希望收集更多关于瓶颈所在位置的数据。你说

Hibernate可以从容不迫地填充对象。

你怎么知道这是Hibernate的问题呢?换句话说,是Hibernate本身的问题,还是没有足够的内存(或太多)导致JVM不能高效运行?

还有,你提到

我们有相当多的模型对象,其中一些是相当大的(就字段的数量而言)。

多少是“相当大”?几十个?上百个?几千人?这会带来很大的不同,因为随着表变得“更宽”(请参阅这个问题:Is there a performance decrease if there are too many columns in a table?),关系数据库(如MySQL)的性能开始变得更差。

性能在很大程度上是关于平衡约束,但它也是关于收集大量数据来查看问题所在,然后修复该问题。然后,您将找到下一个瓶颈并修复它,直到您的性能足够好,或者您的实现时间耗尽为止。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6224096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档