当前位置: 首页 > 面试题库 >

在休眠状态下获得结果的快速方法?

法弘壮
2023-03-14
问题内容

我目前在我的项目中设置了hibernate模式。它适用于大多数情况。但是今天我需要查询返回一个表中的几十万行。它是表中总行的约2 /
3s。问题是查询大约需要7分钟。使用直接JDBC并执行我认为是相同的查询的过程,花费的时间少于20秒。因此,我认为自己做的事情完全错误。我将在下面列出一些代码。

DetachedCriteria criteria  =DetachedCriteria.forlass(MyObject.class);
criteria.add(Restrictions.eq("booleanFlag", false));
List<MyObject> list = getHibernateTemplate().findByCriteria(criteria);

有什么想法为什么会很慢和/或我可以做些什么来改变它?


问题答案:

您可能已经回答了自己的问题,请使用直接JDBC。

Hibernate最多Object为每行创建一个实例,或者更糟的是为每行创建多个Object实例。Hibernate具有真正退化的代码生成和实例化行为,这些行为可能很难控制,尤其是对于大型数据集,如果启用了任何缓存选项,则更糟。

Hibernate不适用于大型结果集,并且 由于对象 也不是非常注重性能的,因此处理成千上万的行。

原始JDBC只是行列的原始类型。数量较少的数据量级。



 类似资料:
  • 问题内容: 如何在Hibernate中实现分页?这些对象具有称为的方法,这些方法肯定有帮助。但是我在哪里可以得到结果的总数,以便可以显示到结果最后一页的链接,并可以打印诸如 xxx的 结果200到250之类的东西? 问题答案: 您可以使用Query.setMaxResults(int results)和Query.setFirstResult(int offset)。 也要进行编辑:无法知道您将获

  • 问题内容: 我需要在hibernate状态下禁用ONLY_FULL_GROUP_BY。这是我当前的会话工厂。我不确定如何在其中指定sql_mode =’‘。 问题答案: 我认为您可以在JDBC连接字符串中进行设置,例如

  • 问题内容: 我正在尝试在具有联接到其他表的Hibernate Criteria查询上使用基于行的限制(例如:和)来实现分页。 可以理解,数据是随机切断的。而其中的原因进行了说明这里。 作为解决方案,该页面建议使用“第二个SQL选择”而不是联接。 如何将现有的条件查询(使用进行联接)转换为嵌套选择呢? 问题答案: 您可以通过请求一个不同的ID列表而不是一个不同的水合对象列表来获得所需的结果。 只需将

  • 问题内容: 我正在使用休眠+播放!框架在工作中,是否有使用“休眠”插入大量记录的“最佳实践”?每个文本文件大约有6,000到10,000个,所以我不知道Hibernate是否会扼杀工作或引发异常。 任何建议都让我知道,如果需要进一步说明,请告诉我 问题答案: 在* Java Persistence and Hibernate“(Manning)中,并在Pangea的评论之后,使用无状态会话(它没有

  • 问题内容: 如果数据库中有2列,例如。 如何告诉Hibernate通过varchar进行代码搜索? 在休眠映射字符串中,字符串被映射到nvarchar,并产生如下查询: 这非常糟糕,因为它导致索引扫描而不是索引查找操作(扫描所有索引节点而不是直接转到请求的节点) 由于代码用于数百万行以及几个索引和外键中,因此将代码从varchar更改为nvarchar会导致性能下降(IO操作更多,因为nvarch

  • 问题内容: 我尝试从hibernate注释创建表。我需要具有Double类型的列,其长度指定为:(10,2)。因此,SQL语法显示如下: 我试图做到这一点: 但是当我查看创建的表时,未指定Double列的长度。hibernate有解决方案吗?还是有必要手动更改表配置? 谢谢! 问题答案: Column批注的元素 仅在使用字符串值的column时适用 。在您的情况下,应使用和元素。 这是规范中关于它