Эта модель отлично подходит для небольшого числа детей, но если число становится очень большим, это кажется неустойчивым.
Я бы сказал, что все зависит от того, что вы хотите с ними делать, но в большинстве случаев это так.
Так что в тех случаях, когда я думаю, что число детей будет очень большим, я использовал методы обслуживания с подкачкой (например, "getChildren (Parent parent, int offset, int count)") вместо этого.
Пейджинг является очень естественным подходом, если вам нужно отобразить (потенциально очень) большое количество результатов для просмотра . Люди чаще всего не хотят или нуждаются во всех записях, и в любом случае они не могут иметь дело с огромным количеством результатов. Случай, когда приложения должны иметь дело со всеми результатами одновременно, конечно, отличается, но JPA может просто не подойти для них.
Вопрос: это лучший способ справиться с подобными ситуациями? Или я что-то пропустил?
IMO, это определенно намного лучше, чем заполнять страницу результатов всей коллекцией, которую вы получили бы, позвонив по номеру parent.getChildren()
, и это сэкономит некоторые ресурсы базы данных, сети, сервера приложений.
Еще одна вещь, которую вы могли бы рассмотреть - ограничение максимального количества результатов при выполнении поиска. Вместо того, чтобы разбивать результаты на 10⁶ (кто вообще будет их просматривать?), Обычно (по крайней мере, по моему опыту) просить пользователя выполнить более строгий поиск, то есть добавлять критерии поиска, пока число результатов не станет управляемым человеком. Это немного отличается от вашего первоначального вопроса.