IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

impossible de récuperer une collection depuis une requête criteria


Sujet :

Hibernate Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut impossible de récuperer une collection depuis une requête criteria
    Bonjour,
    j'ai une entité qui est mapppé à une autre avec une table d'association qui a ses propres propriété. J'essaye de récupérer cette première entité avec sa collection de tables d'association par une requête criteria mais j'obtiens l'exception "collection was evicted; nested exception is org.hibernate.HibernateException: collection was evicted". J'utilise spring boot, hibernate, postgres

    Voici ma première entité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public class EntityA {
     
       private Integer id;
       private String name;
     
       @OneToMany(mappedBy = "entityA")
       @JsonIgnore
       private Set<EntityA_EntityB> association = new HashSet<>();
     
       @Override
       public String toString() {
     
       public void addEntityA_EntityB(EntityA_EntityB enAB) {
            association.add(enAB);
       }
    L'entité correspondant à l'association

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    @Entity
    @Table(name = "ENTITYA_ENTITYB")
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @EqualsAndHashCode   
    public class EntityA_EntityB {
     
       @EmbeddedId
        private EntityA_EntityB_Id id = new EntityA_EntityB_Id();
     
        @ManyToOne
        @MapsId("entityAId")
        @JsonIgnore
        private EntityA entityA;
     
        @ManyToOne
        @MapsId("entityBId")
        @JsonIgnore
        private EntityB entityB;
     
    	@ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "user_id")
        @JsonIgnore
        private User user;
     
        @Override
        public String toString() {
    l'entité de l'autre coté de l'association

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class EntityB {
     
       private Integer id;
       private String name;
    Ma requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    @Repository
    public class EntityARepositoryCustomImpl implements EntityARepositoryCustom {
    
        @PersistenceContext
        private EntityManager entityManager;
    
        @Override
        public List<EntityA> findEntityABySearch(List<String> searchs) {
            CriteriaBuilder cb = entityManager.getCriteriaBuilder();
            CriteriaQuery<EntityA> query = cb.createQuery(EntityA.class);
            Root<EntityA> app = query.from(EntityA.class);
            app.fetch("association", JoinType.INNER);
    
            Path<String> namePath = app.get("name");
    
            List<Predicate> predicates = new ArrayList<>();
            for (String search : searchs) {
                predicates.add(cb.like(namePath, "%"+search+"%"));
            }
            query.select(app)
                    .where(cb.or(predicates.toArray(new Predicate[predicates.size()])));
    
            return entityManager.createQuery(query)
                    .getResultList();
        }
    }
    La ligne qui provoqie l'erreur est la suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    app.fetch("association", JoinType.INNER);
    L'erreur complète affichée est la suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    collection was evicted; nested exception is org.hibernate.HibernateException: collection was evicted

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    j'ai trouvé la solution, il suffit que j'enlève toutes les annotations @EqualsAndHashCode. et @Data de lombock. Les méthodes Equals et Hascode de lombok doivent probablement inclure les informations de mapping ce qui provoque l'erreur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Impossible de modifier une requête
    Par Qualensys dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/07/2009, 09h43
  2. Réponses: 7
    Dernier message: 09/07/2008, 19h11
  3. [MySQL] Impossible d'exécuter une requête
    Par jlb59 dans le forum PHP & Base de données
    Réponses: 31
    Dernier message: 17/04/2008, 15h12
  4. wd12 : impossible de supprimer une requête !
    Par Chris74 dans le forum WinDev
    Réponses: 2
    Dernier message: 24/01/2008, 13h58
  5. MySQL 5 : Impossible d'exécuter une requête
    Par SebastienM dans le forum Requêtes
    Réponses: 3
    Dernier message: 05/11/2007, 18h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo