如何计算hibernate的Criteria查询结果集的大小?

时间:2013-10-07 11:17:13

标签: hibernate criteria-api

如何计算条件查询返回的结果集的字节大小(不是数字行)? 我们收到Out of Memory Exception并且在分析heapdump时我们发现org.hibernate.impl.sessionimpl对象是最臃肿的对象。我们有一个非常复杂的查询,它被执行多次并返回> 4000行,每行有150列。我们想通过尝试获取结果集的大小来查明这是否是违规查询?

同时我们在获取结果集后尝试session.clear(这会工作)。 我可以遵循哪些其他步骤来减少内存中的sessionimpl大小?感谢

2 个答案:

答案 0 :(得分:0)

您可以关注Calculate size of Object in Java回答 但如果你有记忆问题,最好的解决方案可能是:

  1. 最大化内存堆
  2. 使用ScrollableResults来避免所有内存问题
  3. 我更喜欢2号解决方案,因为它是明确的;第一个仍然可能导致记忆问题。

答案 1 :(得分:0)

您可以尝试使用Hibernate Statistics When Optimizing Queries

请参阅上面的链接,其中有关于如何在休眠中使用统计信息的非常好的解释。

仅供参考。

SessionFactory sessionFactory = getSessionFactoryForApplication();
Statistics stats = sessionFactory.getStatistics();
stats.setStatisticsEnabled(true); 

希望这有助于找到代码中出现OM错误的原因。