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é
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 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é de l'autre coté de 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() {
Ma requête
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class EntityB { private Integer id; private String name;
La ligne qui provoqie l'erreur est la suivante
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(); } }
L'erreur complète affichée est la suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 app.fetch("association", JoinType.INNER);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 collection was evicted; nested exception is org.hibernate.HibernateException: collection was evicted
Partager