Spring Boot 在Sping Boot 控制器中使用Stream返回类型导致“java.sql.SQLException:关闭的结果集:下一个”

2ic8powd  于 2023-05-06  发布在  Spring
关注(0)|答案(2)|浏览(173)

当将结果从JpaRepository流式传输到Rest API时,我有一个异常“java.sql.SQLException:关闭的结果集:下一个”
我正在使用Sping Boot ,Spring Data JPA和Oracle Database/JDBC
资料库

  1. @Repository
  2. public interface EntityRepository extends JpaRepository<Entity, Long> {
  3. @Transactional(readOnly = true)
  4. public Stream<Entity> findAllByFilter(String filter);
  5. }

服务项目

  1. @Service
  2. public class EntityService {
  3. @Autowired private EntityRepository repository;
  4. @Transactional(readOnly = true)
  5. public Stream<Entity> getEntityByFilter(String filter) {
  6. return repository.findAllByFilter(filter);
  7. }
  8. }

控制器

  1. @RestController
  2. @RequestMapping("/entities")
  3. public class EntityController {
  4. @Autowired private EntityService service;
  5. @GetMapping(value = "/filter/{filter}")
  6. @Transactional(readOnly = true)
  7. public Stream<Entity> getEntitiesByFilter(@PathVariable("filter") String filter) {
  8. return service.getEntityByFilter(filter);
  9. }
  10. }

在控制器中使用流可以工作,但通过HTTP原因返回流
原因:java.sql.SQLException:关闭的结果集:接下来在oracle.jdbc.driver. InsensiveScrollableResultSet.ensureOpen(InsensiveScrollableResultSet.java:201)~[ojdbc11-21.3.0.0.jar:21. 3.0.0.0]在oracle.jdbc.driver.InsensitiveScrollableResultSet.next(InsensiveScrollableResultSet.java:496)~[ojdbc11-21.3.0.0.jar:21. 3.0.0.0]在com.zaxxer.hikari.pool.HikariProxyResultSet.next(HikariProxyResultSet.java)~[HikariCP-4.0.3.jar:?] at org.hibernate.internal.ScrollableResultsImpl.next(ScrollableResultsImpl.java:101)~[hibernate-core-5.6.5.Final.jar:5.6.5.Final] at org.hibernate.query.internal.ScrollableResultsIterator.hasNext(ScrollableResultsIterator.java:33)~[hibernate-core-5.6.5.Final.jar:5.6.5.Final] at java.util.Iterator.forEachRemaining(Iterator.java:132)~[?:?]

7vhp5slm

7vhp5slm1#

我通过使用查询类的getResultStream并使用Predicates(而不是JpaRepository)应用我的过滤器解决了我的问题,流到HTTP客户端工作得很好

相关问题