Речь идет не о Spring JPA, а о самой JPA. При добавлении отношения применяются следующие значения по умолчанию, если не указано иное.
@xxToOne
- FetchType.EAGER
@xxToMany
- FetchType.LAZY
Итак, в вашем примере у вас есть @ManyToOne
, который имеет выборку по умолчанию EAGER
и один запрос на присоединение добавляется. Если у вашего родителя есть еще один @xxToOne
, он добавляет еще одно объединение и так далее. Хорошо знать границы ваших сущностей и решать, какой тип FetchType
необходим.
Даже если вы добавите вот так:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="parentCode",referencedColumnName="code")
Entity parentEntity;
.. если у вашего родителя больше отношений, возможно, вы загружаете все, когда выбираете родителя. Таким образом, все отношения должны быть ленивыми. Это выбор дизайна, основанный на сущностях.
Но помните о проблеме N + 1 от ORM : JPA Hibernate n + 1 проблема (Lazy & Eager Diff)