Начну с ответа на вторую часть вашего вопроса.
Какова конкретная ситуация, когда мне нужно использовать Fetch and Load?
Есть два основных способа загрузки сущности в JPA, нетерпеливый загрузки и ленивый загрузки. При активной загрузке объект сразу загружается в момент загрузки родителя. При ленивой загрузке объект загружается только тогда, когда вызывается фактический геттер для этого объекта. Высокопроизводительные приложения, как правило, предвзяты к ленивой загрузке, потому что не очень приятно заставить конечного пользователя ждать, когда вся таблица или даже группа таблиц загрузится при запуске приложения. Теперь на ваш второй вопрос.
В качестве стратегии вы указываете FETCH
, импортируя javax.persistence.fetchgraph
в файл, содержащий объект. В этом случае все атрибуты, указанные в графе сущности, будут обрабатываться как FetchType.EAGER
, и все атрибуты , а не, будут указаны как FetchType.LAZY
. С другой стороны, если вы указали LOAD
как свою стратегию, импортировав javax.persistence.loadgraph
, тогда все атрибуты, указанные в графе сущности, также являются FetchType.EAGER
, но атрибуты, не указанные, используют свой указанный тип или значение по умолчанию, если объект ничего не указал.
какой вариант использовать, если у меня нет каких-либо конкретных требований?
Это, как говорится, маловероятно, что у вас нет конкретного требования. По крайней мере, вам нужно, чтобы ваше веб-приложение работало быстро. По этой причине вам, вероятно, следует по умолчанию использовать ленивую загрузку. Использование графика FETCH
является хорошим вариантом, потому что по умолчанию для него требуется ленивая загрузка , за исключением в нескольких особых случаях, когда вы считаете, что атрибут должен быть загружен.
Вот link to a great blog, который объясняет все это подробно, а также образцы кода.
Благодарим вас за ответ вопрос! Я мог понять, как правильно использовать эти параметры. Я думал, что если я использую опцию fetch, я не могу получить данные подкласса, но я все еще могу это сделать, если я вызову метод getter, но данные будут извлекаться из базы данных, когда я вызываю getter, а не загрузку родительского класса. –