在spring-data-jpa中为延迟加​​载的集合设置批量大小

时间:2013-04-02 02:54:55

标签: jpa spring-data-jpa

我需要生成一个包含数据库导出的CSV文件。由于数据可能非常大,我想使用具有特定批量大小的延迟加载,因此当我遍历DAO / Repository返回的集合时,我只会在一个点上加载批处理。我希望这个集合自动完成(例如,我只能使用Pageable作为参数逐页加载。)

这里有一些代码可以让事情变得更清晰。我的控制器看起来像这样:

public ModelAndView generateCsv(Status status) {
    //can return a large number of items.
    Collection<Item> items = itemRepository.findByStatus(status);

    return new ModelAndView("csv", "items", items);
}

如您所见,我将该集合传递给视图(通过ModelAndView对象),视图将遍历它并生成CSV。

我希望集合知道如何在内部加载下一个批处理,这是一个懒惰加载的集合通常应该做的。

有没有办法用Spring-data或普通的JPA来做到这一点? 我知道来自Hibernate的ScrollableResults,但我不喜欢它有两个原因:它不是JPA(我必须让我的代码依赖于Hibernate),而且它不使用集合API,因此我会必须让我的观点了解ScrollableResults。至少如果它会实现Iterable,那会更好,但事实并非如此。

所以我正在寻找一种方法,使用特定的批量大小指定一个集合是延迟加载的。也许是这样的:

@Query("SELECT o FROM Item o WHERE o.status = ?1")
@Fetch(type = FetchType.LAZY, size = 100)
Page<Item> findByStatus(Item.Status status);

如果使用Spring Data无法做到这一点,您知道是否可以使用QueryDsl完成此操作吗? QueryDsl存储库返回Iterator对象的事实使我认为它可能会延迟加载那些,但我找不到相关的文档。

谢谢, 燕姿。

0 个答案:

没有答案