java - Spring PagingAndSortingRepository 在处理期间删除条目

标签 java spring spring-boot spring-data-jpa

我使用 spring PagingAndSortingRepository 对数据库条目进行分页。 在处理过程中我需要删除一些条目..

当我调用存储库进行删除时,该条目被删除,之后问题出在下一个可分页上。我没有从下一个 Pageable (pageRequest.next();) 中获取元素的大小。

有什么方法可以迭代分页并并行执行增删改查操作。

部分代码


 while (!onePage.isEmpty()) {
                while (pageIterator.hasNext()) {
                    Object nextElement = pageIterator.next();
                    if (!falseCondition) {
                        log.info("sending message with Id {}", nextElement.getId());
                        repository.deleteById(nextElement.getId());

                    } else {
                        log.info("Lost connection");
                        return;
                    }
                }

                pageRequest = pageRequest.next();
                onePage = repository.findAll(pageRequest);
                pageIterator = onePage.iterator();

            }

非常感谢。

最佳答案

就像@ruba在示例中指出的那样,这不是 hibernate 问题。即使您直接使用 jdbc API,您也必须处理这种情况。我可以向您提出解决方案

  • 您可以实现自定义 spring-data-jpa 存储库方法,其中服务传递 pageRequest 但您将其转换为 offset限制。因此,您无需调用 pageRequest.next(),而是执行以下操作,其中考虑了已删除的项目。
        long nextPageNumber = pageRequest.getPageNumber() + 1;
        long nextOffset = nextPageNumber * pageRequest.getPageSize() 
                          - itemsDeletedInCurrentPage;
        long limit = pageRequest.getPageSize();
        
        List<Item> itemsInNextPage = em.createQuery(query)
                .setFirstResult(offset)
                .setMaxResults(limit)
                .getResultList();

关于java - Spring PagingAndSortingRepository 在处理期间删除条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63053204/

相关文章:

java - 以编程方式清除 Java\CPU 缓存

spring - 是否可以使用 Spring/Tomcat/Intellij 进行实时更改反馈?

java - 为什么当字段上的 updatable=false 时 hibernate 做 areEqual

java - Spring ClientHttpRequestInterceptor

java - 当我有很多 SpringBootTest 类时,如何有效地使用嵌套配置类来注入(inject)依赖项

java - 主线程异常 : Unable to locate an element with the x path expression

java - 如何检查硬件键盘是否可用? (黑莓)

java - 从 clojure 创建 Java 对象

java - Azure OAuth2 : can't validate access token

java - 在 Java 中使用 Mockito 模拟 JPA 存储库不会被调用