В Hibernate, когда вы получаете объект Entity через нагрузку, если вы получаете доступ к этому объекту Entity id, он не инициализирует прокси:
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 длинно аннотируется с помощью @Id
.
Есть ли какое-то другое соображение, которое мне не хватает, чтобы предотвратить загрузку объекта Company
?