Объекты загружаются из базы данных, когда для FetchType установлено значение LAZY - PullRequest
1 голос
/ 02 июля 2019

Мне пришлось изменить тип выборки с EAGER на LAZY в некоторых классах, чтобы Hibernate не загружал все связанные объекты, но изменение типа выборки, похоже, не работает, и объекты все еще загружаются, как раньше. Я также видел, что Hibernate запускает SELECT сначала для загрузки всех документов, а затем один отдельный SELECT для каждого связанного профиля, если они различны. Зависит от того, относятся ли некоторые из документов к одному профилю или нет. Поэтому, если у меня есть 10 документов с разными профилями, Hibernate выполнит 11 запросов SELECT. Я не уверен, что это нормальное поведение.

Я пытался установить для fetchtype значение LAZY с обеих сторон, даже чтобы удалить отношение со стороны профиля.

public class Profile {

@OneToMany(mappedBy = "profile", fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.REFRESH })
private List<Document> documents;

public abstract class Document {

@ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.REFRESH })
@JoinColumn(name = "profile_id")
private Profile profile;
  EntityManager em = _emf.createEntityManager();
try {
  Query query = em.createQuery("SELECT d FROM Document d ORDER BY d.id DESC");
  List<Document> documents = query.getResultList();
  return documents;
} finally {
  em.close();
}

Я хочу, чтобы Hibernate загружал только документы из базы данных без соответствующих профилей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...