Ste*_*tef 5 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);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我将该集合传递给视图(通过 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);
Run Code Online (Sandbox Code Playgroud)
如果使用 Spring Data 无法实现类似的操作,您知道是否可以使用 QueryDsl 来完成?QueryDsl 存储库返回 Iterator 对象这一事实让我认为它可能会延迟加载这些对象,尽管我找不到这方面的文档。
谢谢,斯特夫。
归档时间: |
|
查看次数: |
1410 次 |
最近记录: |