当前位置: 首页 > 知识库问答 >
问题:

来自JPA存储库的Java 8流

连鸿
2023-03-14

我想从JPA存储库中创建一个流。目标是将来自回购的实体(可能超过一百万)映射到其他实体,这些实体将依次存储在另一个回购中。

到目前为止,我构建了一个收集器,它将收集给定数量(例如1000)实体,然后将其存储到目标存储库中。这将在并行流中工作。我现在需要的是一种从源存储库中提取实体并在需要时将它们馈送到流中的好方法。

到目前为止,最有希望的是实现供应商(http://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html)通过生成来构建流,但是当对源存储库的查询未提供另一个实体时,我没有找到终止该过程的方法。

有什么建议吗?

共有3个答案

赵鸿畴
2023-03-14

一个简单的例子可能是:

  @Repository
  public class MyEntityRepository extends CrudRepository<MyEntity, Long> {           
  }

  @Component
  public class MyEntityService {

       @Autowired
       private MyEntityRepository myEntityRepository;


       public void() {
            // if the findAll() method returns List
            Stream<MyEntity> streamFromList = myEntityRepository.findAll().stream();


            // if the findAll() method returns Iterable
            Stream<MyEntity> streamFromIterable = StreamSupport.stream(myEntityRepository.findAll().spliterator(), true);

       }
  } 
东深
2023-03-14

如果您能够将源代码表示为供应商实现,您还可以实现拆分器。而不是供应商。获取您将实现<code>布尔tryAdvance(Consumer),如果存在新项,它将不返回新值,而是在<code>consumert上调用<code>accept

您必须为< code>Spliterator实现更多的方法,但幸运的是,有直接的方法来实现它们。

public Spliterator<T> trySplit() {
    return null;// simple answer when splitting is not supported
}
public long estimateSize() {
    return Long.MAX_VALUE; // the value which should be used for UNKNOWN
}
public int characteristics() {
    return 0; // no flags but check out whether some flags fit
}

对于<code>characteristics

拥有<code>拆分器

Stream<T> s=StreamSupport.stream(sp, false);

如果您的源代码更适合hasNext/下一个模式,您可以实现一个普通的Iterator并让JRE创建一个Spliterator,就像“如何从迭代器创建Java8 Stream”中描述的那样?

东郭阳德
2023-03-14

我们最近在Spring Data Fowler发布系列的最新RC1版本中增加了对Spring Data JPA(和MongoDB)的支持。

委托默认方法返回的流示例“真实流”流示例

 类似资料:
  • 我有一个似乎工作正常的查询。 } 但是当我尝试将它与JPA一起使用并键入统计DTO时,我得到了以下错误: 具有路径 [/api] 抛出的异常的上下文 [请求处理失败; 嵌套异常是组织.springframework.core.convert.converter不常见: 找不到能够从类型 [org.springframework.data.jpa.repository.query.query.Abs

  • 我有一个springboot项目,为了执行请求,我正在连接到我的mysql数据库。我有一个实体ExportBatch: 我在ExportBatchRepository中定义了一个新方法: 在我的控制器里,我是这样做的: 当我调用“/GetLastBatchsProblemes”时会遇到这个异常:java.lang.ClassCastException:[Ljava.lang.Object;不能强制

  • 我们正在研究一个包含大量DB表的Restful项目。虽然对这些表的操作几乎相同,主要是插入/更新/删除/提取(insert/update/delete/fetch)。 我的问题是: 我们是否必须为我们创建的每一个实体(域类)创建一个存储库(扩展JpaRepository),或者,有一个选项可以为所有实体创建一个能够处理上述所有功能的GenericRepository?即为所有人提供一个单一的Gen

  • 应用:Spring防尘套 我试图用SqlResultSetMapping和NamedNativeQuery将非实体类映射到JPA存储库。 运行应用程序时出现以下错误: 通过字段'cityAddressRepository'表示不满足的依赖关系;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名称为'cityAddress

  • 我使用jpa存储库进行自定义查询。但我发现了错误 错误日志: 通过字段“login service”表示的不满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatisfieddependencyexception:创建名为“login service”的bean时出错:通过字段“login serviceimpl”表示的不满足依赖项;嵌套异常为or

  • 它是否将其存储在缓存中?我有一个应用程序,但应用程序中没有任何地方。属性是提到的db详细信息。我可以通过邮递员存储数据和查询它。