【问题标题】:Hibernate OGM Mongodb Aggregate Query not working with JPA setFirstResult and setMaxResult while next ExecutionHibernate OGM Mongodb Aggregate Query 在下一次执行时不适用于 JPA setFirstResult 和 setMaxResult
【发布时间】:2018-08-06 06:37:34
【问题描述】:

我正在使用 Hibernate OGM (5.2.0.Alpha1) 和 MongoDB (3.4)

当我正在执行时

字符串查询="db.student.find({'collegeName' :'VNSGU'})"

使用 JPA setFirstResult() 和 setMaxResult() 进行分页,它工作正常,但是在执行聚合查询时

字符串查询 = "db.student.aggregate([{'$match' : {'collegeName' :'VNSGU'}}])";

List listOfStudent = entityManager.createNativeQuery(query, Student.class).setFirstResult(startPosition).setMaxResults(noOfRecords).getResultList();

执行:

  • 在数据库表中,我总共有 10 条记录,其中大学名称是 'VNSGU',

  • 当 startPosition = 0 且 noOfRecords = 5 时,它将在 第一次执行,返回5条记录,

  • 当第二次尝试执行查询时 startPosition = 5 和 noOfRecords = 5,它将返回空列表,因为在第二次执行时它 将总共​​有 5 条记录,这是第一次执行的输出(我检查了 通过在没有 setFirstResult() 和 setMaxResult() 的情况下执行查询并返回 总共 5 条记录)。根据我的理解,早期执行的输出将 成为下一次执行的输入,它将返回之前的结果 结果。

但实际上正在发生什么,对此有什么解决方案..??

【问题讨论】:

    标签: java spring-mvc hibernate-ogm


    【解决方案1】:

    确实,这是一个错误。

    我们打开了以下问题来跟踪您报告的错误:https://hibernate.atlassian.net/browse/OGM-1411

    一个修复正在审查中,它将成为即将发布的 5.3.1.Final 版本的一部分。

    【讨论】:

    【解决方案2】:

    根据我的理解,之前执行的输出将成为下一次执行的输入,它将从之前的结果返回结果。

    我认为这不是问题所在。更可能的情况是 Hibernate OGM 缓存了第一个查询的结果,并且第二次也返回了它。这似乎与另一个问题有关:https://hibernate.atlassian.net/browse/OGM-1375

    我会在进一步调查此问题后立即更新此答案。

    【讨论】:

    • 感谢 davide..但在其他查询执行的情况下,如 db.student.find({'collegeName' :'VNSGU'}) ,分页工作正常..休眠 OGM 是否不维护为他们缓存..???
    • 两种场景下的代码有点不同。有可能某些事情会影响一个案例,但不会影响另一个案例。我会在弄清楚发生了什么后立即通知您
    猜你喜欢
    • 1970-01-01
    • 2017-04-11
    • 2012-07-24
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    相关资源
    最近更新 更多