java - 在 hibernate 中快速获得结果的方法?

标签 java oracle hibernate

我目前在我的项目中设置了 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 只是行列的原始类型。数据量减少了几个数量级。

关于java - 在 hibernate 中快速获得结果的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047394/

相关文章:

java - 使用 Hibernate/JPA 设置密码运行时

java - 以编程方式减小 JPEG 文件大小

mysql - varchar2 和 number 数据类型导致 phpmyadmin 中的 SQL 查询编辑器出现错误

Java - jdbc多列选择方法

java - 后台线程调用的警告消息 Transaction afterCompletion

java - 在 Hibernate 中注释枚举列表

java - 使用Java更改AD密码

java - SwingX JX表 : use ColorHighlighter to color rows based on a "row object"

java - 类型 HashMap 不带参数

sql - SQL基础知识(子查询主题)