2016-04-24 2 views
4

J'utilise Hibernate Envers 4.3.10.Final. J'ai les deux JPA classes suivantes:Chargement de la relation ManyToOne avec Hibernate Envers - 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; 
} 

j'ai écrit une méthode qui tous les objets RRT retour précis ou chiffré auditées.

La méthode est:

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() ; 
} 

Après l'exécution de la méthode ci-dessus, mon résultat est une RRT Liste vérifiés. Chaque objet Trgs a bien sûr l'objet Audited Factory correct et releated.

Mais le problème est, que j'ai appris que Hibernate Envers charge toujours Relation LAZY.

Donc, dans mon cas, je dois itérer sur la liste Trgs et initialiser chaque objet Factory. Donc si j'avais par exemple 300 objets Trgs, je dois initialiser 300 objets Factory. Et cela coûte tellement cher. Je dois attendre une minute.

J'ai appris qu'il n'est pas possible de charger rapidement l'objet Factory. Mais j'ai besoin d'une autre solution. Je montre ces données dans un site Dashboad (projet Web). L'utilisateur ne peut pas attendre une minute avant le chargement des données.

S'il vous plaît Aidez-moi à résoudre ce problème. Merci.

+0

Si vous avez mentionné fetch type comme désireux, il devrait le charger tout de suite. Est-ce que vous demandez si vous le changez en paresseux alors la chose mentionnée ci-dessus se produira? – LearningPhase

+0

Non. Dans la documentation Hibernate Envers, il est expliqué que les relations sont toujours LAZY, quel que soit le FetchType que j'ai déclaré. Donc, dans mon cas, j'ai déclaré Factory Object Eager, mais Hibernate Envers charge le Factory Lazy de toute façon. Avez-vous compris mon explication? –

+0

Il y a un problème d'hibernation indiquant qu'il ne sera pas corrigé :(https://hibernate.atlassian.net/browse/HHH-3552 – destan

Répondre

1

L'API Envers AuditQuery peut apporter un certain nombre d'améliorations, ce qui constitue probablement un bon exemple de ses propres faiblesses. J'ai ajouté HHH-11479 à JIRA pour suivre cette fonctionnalité.