首页 > 解决方案 > @Transaction readOnly 在 Spring repo 上并保存在另一个 repo

问题描述

我已经实现了以下代码部分:

        public void computeAllBilling() {
    orderRepository.getAll().parallel().forEach(ordreEntity -> {
        Billing billing = computedBilling(orderEntity);
        billingRepository.save(billing);
        entityManager.detach(ordreEntity);
    });
}

public interface BillingRepository extends JpaRepository<BillingEntity, String> {

    @QueryHints(value = {
            @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_FETCH_SIZE, value = "1"),
        @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_CACHEABLE, value = "false"),
        @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_READONLY, value = "true")
    })
    @Query(value = "SELECT o.* FROM raw.ordre o", nativeQuery = true)
    Stream<BillingEntity> getAll();
}

我需要从一张表中快速流式传输我的阅读,但是在我们的业务处理中,我们需要在结束时保存账单(阅读器一个订单后必须保存其账单)

但遵循此链接:https ://www.geekyhacker.com/2019/03/26/high-performance-data-fetching-using-spring-data-jpa-stream/

我最终需要保存在另一个存储库中,而不是阅读器存储库。任何人都知道避免的方法

“org.springframework.dao.InvalidDataAccessApiUsageException:您正在尝试执行一个流式查询方法而没有保持连接打开的周围事务,以便可以实际使用 Stream。确保使用流的代码使用 @Transactional 或任何其他声明(只读)事务的方式。”

请 ?非常感谢,最好的问候

阿德里安

标签: javaspringhibernatetransactionsstream

解决方案


推荐阅读