当将结果从JpaRepository流式传输到Rest API时,我有一个异常“java.sql.SQLException:关闭的结果集:下一个”
我正在使用Sping Boot ,Spring Data JPA和Oracle Database/JDBC
资料库
@Repository
public interface EntityRepository extends JpaRepository<Entity, Long> {
@Transactional(readOnly = true)
public Stream<Entity> findAllByFilter(String filter);
}
服务项目
@Service
public class EntityService {
@Autowired private EntityRepository repository;
@Transactional(readOnly = true)
public Stream<Entity> getEntityByFilter(String filter) {
return repository.findAllByFilter(filter);
}
}
控制器
@RestController
@RequestMapping("/entities")
public class EntityController {
@Autowired private EntityService service;
@GetMapping(value = "/filter/{filter}")
@Transactional(readOnly = true)
public Stream<Entity> getEntitiesByFilter(@PathVariable("filter") String filter) {
return service.getEntityByFilter(filter);
}
}
在控制器中使用流可以工作,但通过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)~[?:?]
2条答案
按热度按时间7vhp5slm1#
我通过使用查询类的getResultStream并使用Predicates(而不是JpaRepository)应用我的过滤器解决了我的问题,流到HTTP客户端工作得很好
ohfgkhjo2#
事务性方法不应在同一服务类中。
Spring @Transaction method call by the method within the same class, does not work?