Visualizzazione dei risultati da 1 a 8 su 8

Visualizzazione discussione

  1. #6
    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.
    ]
    Si penso sia questo il punto. Infatti alla prima creazione della tabella, i prodotti relativi al fornitore con l'ID=1, vengono rilevati
    Ma non capisco come risolvere...

    Non ho usato l'annotazione @Transactional, ho aggiunto questo(ma come dicevo funziona solo quando il db è appena rigenerato):

    codice:
      @Override
    
     public List<Prodotto> getAllProdotti(Long id) {	
    
     
     return getFornitoreById(id).getProdotti();
    
     
     	}
    



    Ultima modifica di jabjoint; 19-01-2023 a 16:16
    jabjoint

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.