私はHibernate Envers 4.3.10.Finalを使用します。 は、私は、以下の2つのJPA-のクラスを持っている:Hibernate EnversとのManyToOne関係のロード - Eager/Lazy?
public class Factory {
private int factoryID;
....
}
public class Trgs{
private int trgsID;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="fk_factory")
private Factory factory;
}
私は、すべての監査済Trgsオブジェクトretuns方法を書きました。
方法は次のとおりです。
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一覧です。各Trgsオブジェクトはもちろん、正確で関連性のあるAudited Factoryオブジェクトを持っています。
しかし、問題は、私は、Hibernate Enversが常に関係LAZYをロードすることを学んだことです。
私のケースでは、Trgs Listを繰り返し処理し、各Factoryオブジェクトを初期化する必要があります。
for (Trgs trgs : resultList) {
Hibernate.initialize(trgs.getFactory());
}
たとえば、300個のオブジェクトがある場合、300個のファクトリオブジェクトを初期化する必要があります。そしてそれは多くの費用がかかる。私は1分待たなければならない。
私は、Factoryオブジェクトを熱心に読み込むことはできないことを知りました。しかし、私は他の解決策が必要です。このデータをDashboadサイト(Webプロジェクト)に表示します。ユーザーは、データがロードされるまで1分間待つことはできません。
この問題を解決するために私を助けてください。ありがとう。
フェッチタイプを熱心に言及している場合は、すぐに読み込む必要があります。あなたはそれが怠け者に変わったら、上記のことが起こるかどうか尋ねていますか? – LearningPhase
No. Hibernate Enversのドキュメントでは、FetchTypeが宣言されていても関係は常にLAZYであると説明されています。だから私の場合、私はFactory Object Eagerを宣言しましたが、EnverはFactory Lazyをロードします。あなたは私の説明を理解していますか? –
固定されていないことを示す休止状態の問題があります:(https://hibernate.atlassian.net/browse/HHH-3552 – destan