Задать вопрос
@turdubekov
Студент

Как обновить большие данные в Hibernate?

У меня есть сущность: А, который хранить в себе другие сущности (B, C)
Вопрос: Если я хочу обновить данные сущности A (включая B и C)
мне их надо втянуть из сущности A и делать: child.setOldChildValue.(newChildValue) или есть более адекватный способ?

P.s Может ли мне помочь тут - cascade = CascadeType.REFRESH)?

Заранее спасибо!
  • Вопрос задан
  • 114 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Spring
Java Software Engineer
Добрый день.
Читать все данные из БД разом в List<Foo> или любую другую коллекцию не самая лучшая идея.
Соответственно, можно вместо коллекций использовать стримы.
Т.е. Получить Stream<Foo>

Пример,
FooRepository {

@QueryHints(value = {
            @QueryHint(name = HINT_FETCH_SIZE, value = "1000"),
            @QueryHint(name = HINT_CACHEABLE, value = "false"),
            @QueryHint(name = READ_ONLY, value = "true")
    })
    @Query(value = "SELECT DISTINCT f FROM Foo f")
    @Transactional(readOnly = true)
    Stream<Foo> findFoos();

}


Ну а дальше остается распараллелить стрим при помощи parallelStream()
И произвести необходимые операции. Например, вызвать метод map() и в конце сохранить...

Если нужно данную операцию производить периодически, то к методу, который будет производить операцию, добавьте @Async и используйте @Scheduled (или возможности Spring Batch, Spring Quartz)

Для более подробного ответа нужно больше информации.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы