首页 > 解决方案 > 使用 Kotlin 协程加载多个 JPA 实体

问题描述

我正在尝试在应用层中使用 Hibernate 和 Kotlin 协程加载多个实体。做这样的事情。

fun load() : SomeData {

    val steps = someFunctionCallToGetSteps()

    val stepCollection : List<Step> = MutableList()

    runBlocking {

        for (step in steps) {

            val s = async { getStepData(step) }
            payers.add(s.await())
        }
    }
}

private suspend fun getStepData(step : Int) : Iterable<Step> {

    return someComputation()
}

但是这种方法是不正确的,因为我是await立即使用的,所以它本身不是异步的。我被告知要收集所有延期并使用awaitAll,但我在任何地方都找不到任何例子。这可以做到吗?

标签: hibernatekotlinkotlinx.coroutines

解决方案


将每个都s放入列表并在 for 循环之外执行awaitAll(yourListOfs)


推荐阅读