Bonjour, j'appel à l'aide parce que j'ai du mal à comprendre un comportement d'Hibernate.

J'ai d'un coté une entité A ayant une relation ManyToOne avec une autre entité B et ayant un FetchType sur LAZY (donc les entités B sont chargées uniquement si sollicité, non ?)

De l'autre coté j'ai mon EntityManager qui a par défaut un FlushMode sur AUTO.

Normalement il ne devrait pas avoir de relation entre le FetchMode d'une relation et le FlushMode de l'EntityManager puisque l'un concerne le chargement d'une entité et l'autre sa persistance. J'espère que je ne me trompe pas pour l'instant.

A un moment dans mon code j'ai une requête qui ressemble à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
A entite = entityManager.createQuery("select A from A").getResultList().get(0);
logger.info("id de B : " + entite.getB().getId();
logger.info("contenu de B : " + entite.getB().getContenu();
Lorsque le FlushMode de l'EntityManager est AUTO, l'id et le contenu de B sont chargé et donc non-null. Mais sur COMMIT, seul l'id de B est non-null, le contenu lui n'est visiblement pas chargé (contenu = null).

Comment ce fait-il que le FlushMode de l'EntityManager empêche le chargement d'une entité ? (par le biais d'une relation j’entends, pas l'entité récupéré par la requête). Normalement le FlushMode ne concerne que la persistance des données, non ?