- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Hibernate 并且我想执行这个查询:
SELECT s.executionTime, g.date, s.name
FROM SimulationStatsGroup g
LEFT JOIN SimulationStats s ON s.group_id = g.id
WHERE g.name = 'general'
ORDER BY g.date DESC
LIMIT 30
在此查询中,我必须使用表和 1 SimulationStatsGroup
包含几个 SimulationStats
.
但是,使用HQL,LIMIT
生成错误,因为 hibernate 不支持它。所以我用了 setMaxResults(int)
相反,但是当我在日志中查找查询时,我可以看到没有 LIMIT
完全没有。
这可能是因为Hibernate 知道 SimulationStatsGroup
可以包含多个 SimulationStats
,因此它知道限制为 30 个结果不会返回 30 SimulationStatsGroup
根据需要,但 30 行,这将给我 3 SimulationStatsGroup
如果我们假设有 10 个 SimulationStats
在 1 SimulationStatsGroup
.
因此,我可以理解为什么它会以这种方式工作,而不是我想要的方式。但是,这种执行查询的方式使我的应用程序崩溃,因为它使用了太多内存,因为我的表中有超过 100 万行,而且 Hibernate 似乎试图将所有行放在一个列表。
我的问题是:有没有办法限制内存的使用以保持我的应用程序处于 Activity 状态并且只保留我的 30 个对象?
最佳答案
对于非常大的表,我建议您使用 the seek method但它需要运行 native 查询,并且每个数据库都有自己的限制行数的方式。
在您的情况下,您可以简单地运行两个查询而不是一个:
第一个查询只返回父 ID:
Session session = sessionFactory.openSession();
Query query = session.createQuery("select ssg.id from SimulationStatsGroup ssg");
query.setFirstResult(0);
query.setMaxResults(10);
List<Long> ids = query.list();
然后您可以使用第二个查询来获取带有子项的父项:
Session session = sessionFactory.openSession();
Query query = session.createQuery("select ssg from SimulationStatsGroup ssg left join fetch ssg.simulationStats where ssg.id in (:ids) ");
query.setParameterList("ids", ids);
List<SimulationStatsGroup> simulationStatsGroups = query.list();
这样你就可以绕过 Hibernate 内存中的父子分组限制。
关于java - 带有大表的 setMaxResults 使用太多内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27051866/
我有一个带有 @ManyToMany(fetch=FetchType.EAGER) 子集合的父实体。 我只需要加载我找到的父实体的第一条记录,因此我使用以下条件加载它: session.createC
我正在使用 Hibernate 并且我想执行这个查询: SELECT s.executionTime, g.date, s.name FROM SimulationStatsGroup g LEFT
如果我不设置setFirstResult(-),每次递归调用criteria.setmaxresults(10),它会自动从数据库中抓取接下来的10条吗? 最佳答案 没有。您必须使用 criteria
每当我使用 setMaxResult 时,我都会在 hibernate session (而不是实体管理器)中使用条件,我会收到如下异常: 代码段: crit2.add(criterion).setF
我在 Criteria Builder 中编写了一个查询,它看起来像这样。 private EntityManager entitymanager; CriteriaBuilder criteriaB
App使用JPA Hibernate,数据库为Sybase;它针对每种域类型都有多个搜索屏幕。我知道 query.setMaxResult(limit) 将防止查询返回太多。对于 Sybase,我相信
我正在尝试从给定特定用户和最大数量的数据库中获取一定数量的行。这是当前代码的样子: @Override public Collection findMaxByUser(User _user, int
我正在使用 nHibernate 并尝试实现一些分页。如果我运行这段代码 IList list = session.CreateQuery("FROM Author").List(); 它返回 8 条
我们可以使用 setMaxresults 属性来获取页面中的响应,而不是为 bigquery 中的作业设置AllowLargeResults true,或者即使我们已经设置了 setMaxresult
我收到此错误:“LDAPSearchException:超出大小限制”错误并且服务器仅返回 500 个结果。我们经验丰富的 LDAP 管理员向我保证,服务器上没有设置此限制。事实上,通过在 CLI 上
我是 hibernate 新手。我有一个如下查询 select a.*, b.* from tableA a join tableB b on b.aId = a.id left join table
我是 Hibernate 的新手,使用 SetMaxResults() 函数时遇到一些错误。这是我的 MySQL 表数据:: 1 J. C. Smell 2 J. C. Smell 3 J
我的应用程序中有分页问题。我想使用 setFirstResult 和 setMaxResults 方法,但它给了我错误的输出: (我的数据库:SQLite) 例子: Session sessi
我与 hibernate 有一些争执。我的查询虽然经过优化,但相当繁重。我的优化之一在于限制返回的结果集。因此,在 hibernate 中,我使用了 setMaxResultSet 方法,但我遇到了本
docs说: Criteria setMaxResults(int maxResults) >Set a limit upon the number of objects to be retrieve
当我在查询上调用 setMaxResults 时,它似乎想将最大数字视为“2”,无论它的实际值是多少。 function findMostRecentByOwnerUser(\Entities\Use
什么会导致 CriteriaQuery orderBy 方法停止工作? 实现如下: OpenJPAEntityManager kem = OpenJPAPersistence.cast(ent
在一个特定的项目中,我遇到了不同配置中类型化查询的问题。 当在 TypedQuery 上设置 maxResults 值大于查询返回的实际结果数时,getResultList() 的执行时间会非常长(有
我编写了以下代码片段,使用 hibernate 作为 JPA 提供程序从 zips 表中获取某些 zip 文件的记录。 public List getZipEntityFromZipName(
以下两种执行结果有限的简单 Hibernate 查询的方法在 Sybase 中都不起作用。它们都会导致 SybSQLException:'@p0' 附近的语法不正确。 Query q = sessio
我是一名优秀的程序员,十分优秀!