
Originariamente inviata da
andbin
Il punto è che la lista dei prodotti ha il FetchType.LAZY. Pertanto puoi accedere alla lista solo nell'arco di tempo in cui il persistence context è attivo.
Se hai fatto un service con un metodo con @Transactional(readOnly=true) per leggere i fornitori, il persistence context è attivo solo lì dentro. Se l'accesso alla lista dei prodotti è fatto SOLO ad un livello più alto (controller/vista), il ORM non applica la lettura in modo lazy perché sei fuori dal persistence context.
La soluzione banale: fai un get della lista nel metodo del service, questo fa attivare il meccanismo lazy della lettura.
Un'altra soluzione più architetturale è quella di NON esporre mai gli oggetti delle entity al controller/vista ma fornire degli oggetto DTO di passaggio che sono eventualmente più focalizzati sul modello della vista.