Отношения Hibernate работают с различными стратегиями отбора .. !!
Hibernate обеспечивает 4 стратегии для извлечения данных:
ВЫБРАТЬ
@OneToMany(mappedBy="tableName", cascade=CascadeType.ALL)
@Column(name="id")
@Fetch(FetchMode.SELECT)
В этом методе есть несколько SQLs обстреляли. Этот первый загорается для извлечения всех записей в родительской таблице. Оставшиеся уволены для получения записей для каждой родительской записи. Это в основном проблема N + 1. Первый запрос извлекает N записей из базы данных, в этот случай N записей родителя. Для каждого родителя новый запрос получает Ребенок. Поэтому для N родительских запросов N запросов извлекает информацию из таблицы .
РЕГИСТРИРУЙТЕСЬ
@OneToMany(mappedBy="tableName", cascade=CascadeType.ALL)
@Column(name="id")
@Fetch(FetchMode.JOIN)
Это похоже на ВЫБРАТЬ выборки стратегии, за исключением того факта, что все поиска базы данных имеют место авансовые в JOIN выборки в отличие от SELECT, , где это происходит на необходимость основа. Это может стать важным соображением производительности .
подвыбор
@OneToMany(mappedBy="tableName", cascade=CascadeType.ALL)
@Column(name="id")
@Fetch(FetchMode.SUBSELECT)
Два SQLs увольняют. Один для извлечения всех родительских, а второй использует запрос SUBSELECT в предложении WHERE для извлечения всего дочернего элемента, который имеет , соответствующие идентификаторам родителей.
ПАРТИЯ
@OneToMany(mappedBy="tableName", cascade=CascadeType.ALL)
@Column(name="id")
@@BatchSize(size=2)
Карта размера партии к числу родителя, чей ребенок извлекается. Таким образом, мы можем указать количество записей, которые будут выбраны за раз. Но Будет выполнено несколько запросов. !!
один-ко-многим & многие-ко-многим позволяет - присоединиться, Select и подвыбор
много-к-одному & один-к-одному позволяет - Регистрация и выбор
Hibernate также различает (Когда это ассоциации выбираются)
1. Немедленное извлечение -
ассоциация, сбор или атрибут извлекается немедленно, когда Родитель загружается. (Ленивая = «ложь»)
2. коллекции Ленивых выборки -
коллекция извлекается, когда приложение вызывает операцию при этой коллекции. (Это значение по умолчанию для коллекций (ленивая = «истина»)
3. "Extra-ленивый" коллекция выборки -.
отдельных элементы коллекции доступны из базы данных а пытается нужно. Hibernate не извлечь всю коллекцию в памяти, если совсем не нужно (подходит для очень больших коллекций) (ленивый = «экстра»)
4. прокси выборки -
однозначная ассоциация выбирается, когда метод, отличный от идентификатора геттер вызывается на соответствующий объект. (ленивая = «прокси»)
5. "Нет-прокси" выборка -
однозначная ассоциация выбирается, когда переменная экземпляра доступа. По сравнению с прокси выборки, этот подход менее ленивым (ленивым = «не-прокси»)
6. Ленивый атрибут не выборки -.
атрибут или однозначную ассоциацию извлекается, когда экземпляр .(Ленивым = «истина»)
один-ко-многим & многие-ко-многим позволяет Immediate, Layzy, Extra Lazy
много-к-одному & один-к-одному допускает немедленный прокси-сервер, нет прокси
Спасибо, что это помогает. :) – user2731899