Мне пришлось изменить тип выборки с 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 загружал только документы из базы данных без соответствующих профилей.