Wat is die beste manier om 'n Hibernate-objekgrafiek te laai voordat dit in 'n UI gebruik word?

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

  •  09-06-2019
  •  | 
  •  

Vra

Die situasie is soos volg:

  • Jy het 'n Hibernate konteks met 'n voorwerp grafiek wat 'n bietjie lui het laai gedefinieer.
  • Jy wil gebruik die Hibernate voorwerpe in jou UI as is sonder om die data te hoef te kopieer Iewers.
  • Daar is verskillende UI kontekste wat verskillende vereis hoeveelhede data.
  • Die data is te groot om elke keer net die hele grafiek te laai.

Wat is die beste manier om al die toepaslike voorwerpe in die objekgrafiek op 'n konfigureerbare manier te laai sodat toegang tot hulle verkry kan word sonder om terug te gaan na die databasis om meer data te laai?

Enige hulp.

Was dit nuttig?

Oplossing

Kom ons sê jy het die kliënt en op 'n punt dat jy iets met sy Bestellings en miskien het hy 'n Bonus vir sy Bestellings.

Toe ek sou 'n Repository met 'n vlot koppelvlak wat jou sal toelaat my om so iets te sê definieer

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

En daar het jy die kliënt met alles wat jy nodig het. Dit is verkieslik dat jy vooraf weet wat jy sal nodig hê vir die huidige operasie. Op hierdie manier kan jy ongewenste besoeke aan die databasis voorkom (nuwe devs in jou span sal dit gewoonlik doen - bel 'n eiendom en nie bewus te wees van die feit dat dit eintlik 'n oproep om die DB).

Ander wenke

As dit is 'n webapp en jy gebruik die lente, dan OpenSessionInViewFilter kon die oplossing vir jou probleme wees.

'n Benadering wat ons in ons projekte gebruik, is om 'n diens te skep vir elke siening wat jy het.Dan haal die aansig die subgrafiek wat jy nodig het vir hierdie spesifieke aansig, en probeer altyd om die aantal sqls wat na die databasis gestuur word te verminder.Daarom gebruik ons ​​baie verbindings om die n:1 geassosieerde objekte te kry.

As jy 'n 2-vlak lessenaartoepassing gebruik wat direk aan die DB gekoppel is, kan jy net die voorwerpe aangeheg laat en bykomende data enige tyd outomaties laai.Andersins moet jy dit weer aan die sessie koppel en die assosiasie waarmee jy nodig het, inisialiseer Hibernate.initialize(Object entity, String propertyName)

(Onvol geheue, miskien nie 100% korrek nie)

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top