如何在jparepository中使用Stream方法

时间:2018-07-20 05:34:27

标签: java spring vaadin

我是Spring的新手。如何在jparepository中使用Stream方法。我想从jparepository中获取数据。我还配置了applicationcontext.xml。我使用的是Spring 4版本

我的存储库类

@Repository
 public interface CustomerRepository extends JpaRepository<Customer, Long>{
    @Query("select   c from  Customer c")
    Stream<Customer> getAllFirstNames();
}

我的mainclass.java

 @Transactional
  public class VaadinUI extends UI  {
      @Autowired
      private  CustomerRepository repo;
         System.out.println("enter into try block");
          Stream<Customer> customers= repo.getAllFirstNames();
          System.out.println("Customers"+ customers); 
    } 

现在我遇到类似
的错误    您正在尝试在没有周围事务的情况下执行流查询方法,该事务不会使连接保持打开状态,从而可以实际使用Stream。确保使用流的代码使用@Transactional或其他任何声明(只读)事务的方式。

如何解决该问题。如何在maincalss.java中调用存储库流方法 我添加 @Transactional(readonly = true),直到出现相同的错误。 请帮帮我!

1 个答案:

答案 0 :(得分:0)

您需要做几件事。

  1. 使用流处理数据需要我们在完成流后关闭流。 可以通过在Stream上调用close()方法或使用try-with-resources

    来完成。
     try (Stream<Customer> customers = repo.getAllFirstNames()) {
        System.out.println("Customers"+ customers); 
     }
    
  2. 使调用此函数的方法为Transactional(readonly=true)