在 Java 中,使用 JPA 和 Spring Data,我使用流从数据库获取数据。例如:
@Query(value = STATIC_QUERY_STRING,
countQuery = STATIC_COUNT__QUERY_STRING
)
@QueryHints(value = {
@QueryHint(name = HINT_FETCH_SIZE, value = "" + Integer.MIN_VALUE),
@QueryHint(name = HINT_CACHEABLE, value = "false"),
@QueryHint(name = HINT_READONLY, value = "true")})
Stream<ObjectDto> search(@Param("searchDTO") SearchDto searchDto);
如果我针对返回
Page<ObjectDto>
的类似函数编写单元测试,我就能够通过测试。但是,如果我针对任何 Stream 版本编写测试,则会遇到内存测试问题。
原因:org.springframework.orm.jpa.JpaSystemException:无法 使用滚动执行查询;嵌套异常是 org.hibernate.exception.GenericJDBCException:无法执行查询 使用滚动
我的结论是,内存h2数据库不支持这个操作,但还没有真正找到任何方法来证实或否认这个假设。我四处搜寻并没有得到明确的答案。有谁遇到过并解决这个问题吗?
这个错误似乎已经在这个旧帖子中得到了回答:H2数据库是否支持滚动
hint-fetch-size 似乎在 h2 中不起作用。