Qual è il modo migliore per caricare un grafico di oggetti Hibernate prima di utilizzarlo in un'interfaccia utente?

StackOverflow https://stackoverflow.com/questions/79843

  •  09-06-2019
  •  | 
  •  

Domanda

La situazione è questa:

  • Hai un contesto in letargo con un grafico a oggetti che ha un caricamento pigro definito.
  • Si desidera utilizzare gli oggetti Hibernate nella tua interfaccia utente come è senza dover copiare i dati da qualche parte.
  • Esistono diversi contesti dell'interfaccia utente che richiedono diverse quantità di dati.
  • I dati sono troppo grandi per caricare semplicemente l'intero grafico ogni volta.

Qual è il modo migliore per caricare tutti gli oggetti appropriati nell'oggetto grafico in modo configurabile in modo che sia possibile accedervi senza dover tornare al database per caricare più dati?

Qualsiasi aiuto.

È stato utile?

Soluzione

Diciamo che hai il Cliente e ad un certo punto devi fare qualcosa con i suoi Ordini e magari lui ha un Bonus per i suoi Ordini.

Quindi definirei un Repository con un'interfaccia fluente che mi permetterà di dire qualcosa del tipo:

new ClientRepo().LoadClientBy(id)
                .WithOrders()
                .WithBonus()
                .OrderByName();

Ed ecco il cliente con tutto ciò di cui hai bisogno.È preferibile che tu sappia in anticipo di cosa avrai bisogno per l'operazione corrente.In questo modo puoi evitare viaggi indesiderati nel database (i nuovi sviluppatori nel tuo team di solito lo faranno: chiamano una proprietà e non si rendono conto del fatto che in realtà è una chiamata al DB)

Altri suggerimenti

Se si tratta di un'app Web e utilizzi Spring, OpenSessionInViewFilter potrebbe essere la soluzione ai tuoi problemi.

Un approccio che utilizziamo nei nostri progetti è creare un servizio per ogni vista che hai.Quindi la vista recupera il sottografico necessario per questa vista specifica, cercando sempre di ridurre il numero di SQL inviati al database.Pertanto stiamo utilizzando molti join per ottenere gli oggetti associati n:1.

Se stai utilizzando un'app desktop a 2 livelli connessa direttamente al DB puoi semplicemente lasciare gli oggetti collegati e caricare dati aggiuntivi in ​​qualsiasi momento automaticamente.Altrimenti devi ricollegarlo alla sessione e inizializzare l'associazione che ti serve Hibernate.initialize(Object entity, String propertyName)

(Memoria insufficiente, forse non corretto al 100%)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top