В настоящее время я начинаю работать с micronaut и kotlin.У меня есть запрос JPA, который дает около 1 миллиона результатов.Эти результаты я хочу передать из одной службы микронавта в другую.
Мой запрос возвращает allQuery.resultStream
типа java.util.stream
.
Контроллер службы отправки:
@Get("/test{value1,value2,value3}")
fun getTestObjects(
value1: String,
value2: String,
value3: String
): Stream<TestObject> {
val entries = testRepository.findAllWhere(value1, value2, value3)
return entries
}
Клиент получающей услуги:
@Get("/data/test{value1,value2,value3}")
override fun getTestObjects(alue1: String,
value2: String,
value3: String) : Stream<TestObject>
И запрос JPA выглядит следующим образом:
val cb = entityManager.criteriaBuilder
val cq = cb.createQuery(TestObject::class.java)
val rootEntry = cq.from(TestObject::class.java)
val predicates = mutableListOf<Predicate>()
predicates.add(cb.like(rootEntry.get<String>("value1"), value1))
predicates.add(cb.equal(rootEntry.get<String>("value2"), value2))
predicates.add(cb.equal(rootEntry.get<Int>("value3"), value3))
val cqAllWhere = cq.select(rootEntry)
.where(cb.or(*predicates.toTypedArray()))
val allQuery = entityManager.createQuery(cqAllWhere)
val entries = allQuery.resultStream
return entries
Мой ожидаемый результат будет своего рода Текучим с регулированием возврата и без службы отправкисначала получить все объекты в память, потому что такой большой объем памяти будет недоступен.