Ответ 1
max_fetch_depth: Представьте себе человека и адресную сущность. Каждый человек живет по одному адресу (очень простая система), но многие люди могут жить по тому же адресу. В объектной модели у Человека, вероятно, будет свойство адреса. Это будет отображаться как много-к-одному (как говорит док). Теперь, выбирая Person из базы данных, hibernate встречает это свойство. В базе данных это столбец с внешним ключом в таблице адресов. Чтобы получить связанный объект, можно использовать соединение с этой таблицей. Полученные данные будут использованы для заполнения объекта Address, который будет установлен на свойство адреса для человека. В этом смысле Hibernate обходит граф объекта при извлечении объекта. Теперь, что, если Адрес имел собственность Город? Это также было бы много-к-одному и привело бы к объединению по той же логике. Что, если у Города была собственность? То же самое. Выполнение многих объединений было бы плохо для производительности. В какой-то момент было бы лучше сделать отдельный выбор, получить данные из кеша или ввести прокси. Это свойство конфигурации определяет, сколько объединений hibernate будет проходить путем соединения при извлечении данных.
default_batch_fetch_size: Это свойство очень низкого уровня, которое определяет, сколько строк Hibernate будет запрашивать драйвер JDBC для извлечения/загрузки при запросе ассоциации коллекции. Если вы будете запрашивать все города в стране (предыдущий пример), то, загружая данные партиями через соединение JDBC, процесс получения данных через и в память как объекты будет более упорядоченным. По сравнению с кольцом для выполнения запроса для приложения для обработки данных потребуется, однако, как правило, он незначителен. Обычно оставить свойство конфигурации значением по умолчанию будет правильным.