В Hibernate, когда вы получаете Entity через нагрузку, если вы получаете доступ к идентификатору этого Entity, он не инициализирует прокси:
Property myProp = (Property) session.load(Property.class, myId);
myProp.getId(); // Doesn't load the proxy
myProp.getDescription(); // Loads the proxy from the database hit
Однако мне неясно, каковы правила загрузки прокси ассоциаций. У меня сложилось впечатление, что при извлечении сущности с помощью HQL-запроса или критериев применяются те же правила.
Каждый Property
в моем коде имеет Company
. Company
объявляется так:
@ManyToOne(fetch = FetchType.LAZY, optional=false)
@JoinColumn(name = "company_id", nullable=false)
private Company company;
Однако в моем коде в настоящее время я получаю N + 1 выбор при переборе Properties
, потому что Company
загружается при вызове Company.getId()
.
И в объекте Company
, и в Property
поле id представляет собой Long, помеченное @Id
.
Есть ли еще какие-то соображения, которые я упускаю, чтобы предотвратить загрузку Company
сущности?