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

如何在具有联接和基于行的限制(分页)的休眠状态下获得不同的结果?

廖琨
2023-03-14
问题内容

我正在尝试在具有联接到其他表的Hibernate
Criteria查询上使用基于行的限制(例如:setFirstResult(5)setMaxResults(10))来实现分页。

可以理解,数据是随机切断的。而其中的原因进行了说明这里。

作为解决方案,该页面建议使用“第二个SQL选择”而不是联接。

如何将现有的条件查询(使用createAlias()进行联接)转换为嵌套选择呢?


问题答案:

您可以通过请求一个不同的ID列表而不是一个不同的水合对象列表来获得所需的结果。

只需将其添加到您的条件中:

criteria.setProjection(Projections.distinct(Projections.property("id")));

现在,根据基于行的限制,您将获得正确的结果数。之所以可行,是因为投影将 作为 sql查询的 一部分
执行差异检查,而不是ResultTransformer所做的是 执行sql查询 之后 过滤结果的差异性。

值得注意的是,您现在将获得一个ID列表,而不是获取对象列表,您可以使用它们在以后hibernate时混合对象。



 类似资料:
  • 问题内容: 我目前在我的项目中设置了hibernate模式。它适用于大多数情况。但是今天我需要查询返回一个表中的几十万行。它是表中总行的约2 / 3s。问题是查询大约需要7分钟。使用直接JDBC并执行我认为是相同的查询的过程,花费的时间少于20秒。因此,我认为自己做的事情完全错误。我将在下面列出一些代码。 有什么想法为什么会很慢和/或我可以做些什么来改变它? 问题答案: 您可能已经回答了自己的问题

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

  • 问题内容: 我这样做是为了对实体对象进行延迟加载: 我想与多个延迟加载的集合返回一个实体对象 加载的 ,我能做到这一点(通过在列表中,并设置超过联想单个标准是什么?): 问题答案: 是? 该文档包含以下内容: 该查询将通过外部联接获取伴侣和小猫。有关更多信息,请参见第20.1节“获取策略”。

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

  • 问题内容: 是否可以限制使用Hibernate / HQL更新的行数?例如: 我一直在使用Google搜索,以便尝试在内存数据库中使用HSQL DB以及在部署中使用MySql进行一些单元测试。MySql在Update语句上支持Limit子句,但HSQL不支持,在HSQL中使用内部选择进行UPDATE需要按顺序排序,这似乎是个坏主意。有没有办法限制更新中的行数? 谢谢。 问题答案: 在Hiberna

  • 问题内容: 以两个表为例:和。 列出产品详细信息,包括名称和ID,同时列出涉及产品的交易,包括日期,产品ID,客户等。 我需要显示一个网页,其中显示10个产品,每个产品的最近5个交易。到目前为止,如果mysql允许该部分,则似乎没有任何查询有效,并且下面的子查询也可以工作( 在“ where子句”中 出现 Unknown列“ ta.product_id”的 失败 :[ERROR:1054] )。