Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Spring Boot-JPA Repository-Stream resultset无法使用next()提前抛出错误_Spring Boot_Rest_Jpa_Spring Data Jpa_Java Stream - Fatal编程技术网

Spring boot Spring Boot-JPA Repository-Stream resultset无法使用next()提前抛出错误

Spring boot Spring Boot-JPA Repository-Stream resultset无法使用next()提前抛出错误,spring-boot,rest,jpa,spring-data-jpa,java-stream,Spring Boot,Rest,Jpa,Spring Data Jpa,Java Stream,我正在尝试从存储库中传输数据,并将其写入servlet输出流。流媒体传输时,我面临无法读取数据错误。我已经有了@Transactional注释 @Autowired private MyRepository < Y > repository; @Autowired private Gson gson; @Transactional(readOnly = true) public long writeData(ServletOutputStream outputStream) {

我正在尝试从存储库中传输数据,并将其写入servlet输出流。流媒体传输时,我面临无法读取数据错误。我已经有了@Transactional注释

@Autowired
private MyRepository < Y > repository;

@Autowired
private Gson gson;

@Transactional(readOnly = true)
public long writeData(ServletOutputStream outputStream) {
  JsonWriter writer = new JsonWriter(new OutputStreamWriter(outputStream, UTF_8));
  int count = 0;
  writer.beginArray();
  try (Stream < T > stream = repository.findAll()) {
    stream.forEach(e ->{
      gson.toJson(e, e.getClass(), writer);
      count++;
    });
  }
  writer.endArray();
  writer.flush();
  writer.close();
}
@Autowired
私有MyRepository存储库;
@自动连线
私人Gson;
@事务(只读=真)
公共长写数据(ServletOutputStream outputStream){
JsonWriter writer=新的JsonWriter(新的OutputStreamWriter(outputStream,UTF_8));
整数计数=0;
writer.beginArray();
try(StreamStream=repository.findAll()){
stream.forEach(e->{
toJson(e,e.getClass(),writer);
计数++;
});
}
writer.endArray();
writer.flush();
writer.close();
}
错误:
org.hibernate.exception.genericjdbception:无法使用next()

MyRepository在配置类中注入了entitymanager bean。所以我能够在repository类中打印数据

但当程序控制流回到我执行此操作的方法时,我无法这样做,因为entitymanager不属于此类的作用域

我所做的是,将构造函数(MyRepository repo)添加到类中并更新配置文件。这就解决了问题

@Configuration
@EnableTransactionManagement
public class MyConfiguration extends ConfigurationTemplate < MyEntity > {

  @Autowired
  private EntityManager entityManager;

  @Override
  @Bean
  @Scope("prototype")
  public DataStreamWriter < MyEntity > streamWriter() {
    return new DataStreamWriter < >(myRepository());
  }

  @Override
  @Bean
  public MyRepository myRepository() {
    return new MyRepository < >(MyEntity.class, entityManager);
  }

}

@配置
@启用事务管理
公共类MyConfiguration扩展了ConfigurationTemplate{
@自动连线
私人实体管理者实体管理者;
@凌驾
@豆子
@范围(“原型”)
公共DataStreamWriterstreamWriter(){
返回新的DataStreamWriter<>(myRepository());
}
@凌驾
@豆子
公共MyRepository MyRepository(){
返回新的MyRepository<>(MyEntity.class,entityManager);
}
}

MyRepository在配置类中注入了entitymanager bean。所以我能够在repository类中打印数据

但当程序控制流回到我执行此操作的方法时,我无法这样做,因为entitymanager不属于此类的作用域

我所做的是,将构造函数(MyRepository repo)添加到类中并更新配置文件。这就解决了问题

@Configuration
@EnableTransactionManagement
public class MyConfiguration extends ConfigurationTemplate < MyEntity > {

  @Autowired
  private EntityManager entityManager;

  @Override
  @Bean
  @Scope("prototype")
  public DataStreamWriter < MyEntity > streamWriter() {
    return new DataStreamWriter < >(myRepository());
  }

  @Override
  @Bean
  public MyRepository myRepository() {
    return new MyRepository < >(MyEntity.class, entityManager);
  }

}

@配置
@启用事务管理
公共类MyConfiguration扩展了ConfigurationTemplate{
@自动连线
私人实体管理者实体管理者;
@凌驾
@豆子
@范围(“原型”)
公共DataStreamWriterstreamWriter(){
返回新的DataStreamWriter<>(myRepository());
}
@凌驾
@豆子
公共MyRepository MyRepository(){
返回新的MyRepository<>(MyEntity.class,entityManager);
}
}