Загрузить отношение ManyToOne с помощью Hibernate Envers — нетерпеливо/лениво?

Я использую Hibernate Envers 4.3.10.Final. У меня есть следующие два JPA-класса:

public class Factory {
     private int factoryID;
     .... 
}

public class Trgs{
     private int trgsID;

     @ManyToOne(fetch=FetchType.EAGER)
     @JoinColumn(name="fk_factory")
     private Factory factory;
}

Я написал метод, который повторно настраивает все объекты Audited Trgs.

Метод:

public List<Trgs> readAuditedTrgs (List<Integer> trgsIds) {
      AuditReader reader = AuditReaderFactory.get(entityManager);
      AuditQuery query = reader.createQuery().forRevisionsOfEntity(Trgs.class, true, true);

      query.add(AuditEntity.id().in(ids));
      query.add(AuditEntity.revisionType().eq(RevisionType.ADD));
      query.addOrder(AuditEntity.revisionNumber().desc());
      return  query.getResultList() ;
}

После выполнения описанного выше метода мой результат — проверенный список операций. Каждый объект Trgs, конечно же, имеет правильный и проверенный объект Factory.

Но проблема в том, что я узнал, что Hibernate Envers всегда загружает Relation LAZY.

Так что в моем случае я должен перебирать список Trgs и инициализировать каждый объект Factory.

 for (Trgs trgs : resultList) {
      Hibernate.initialize(trgs.getFactory());
    }

Итак, если бы у меня было, например, 300 объектов Trgs, мне нужно было бы инициализировать 300 объектов Factory. А это стоит оооочень дорого. Я должен подождать одну минуту.

Я узнал, что невозможно загрузить фабричный объект с нетерпением. Но мне нужно другое решение. Я показываю эти данные на сайте Dashboard (веб-проекте). Пользователь не может ждать одну минуту, пока данные загрузятся.

Пожалуйста, помогите мне решить эту проблему. Спасибо.


person java java    schedule 24.04.2016    source источник
comment
Если вы упомянули тип выборки как нетерпеливый, он должен загрузить его сразу. Вы спрашиваете, если вы измените его на ленивый, то произойдет вышеупомянутое?   -  person LearningPhase    schedule 24.04.2016
comment
Нет. В документации Hibernate Envers объясняется, что отношения всегда LAZY, независимо от того, какой FetchType я объявил. Итак, в моем случае я объявил Factory Object Eager, но hibernate Envers все равно загружает Factory Lazy. Вы поняли мое объяснение?   -  person java java    schedule 24.04.2016
comment
Существует проблема со спящим режимом, в которой говорится, что она не будет исправлена ​​:( hibernate.atlassian.net/browse/ HHH-3552   -  person destan    schedule 27.10.2016


Ответы (1)


Существует ряд улучшений, которые можно использовать в Envers AuditQuery API, что, вероятно, является хорошим примером его собственных недостатков. Я добавил HHH-11479 в JIRA для отслеживания этой функции.

person Naros    schedule 09.02.2017