Vra

Wanneer 'n afgeleë diens gebel word (bv.oor RMI) om 'n lys van entiteite vanaf 'n databasis te laai met Hibernate, hoe bestuur jy dit om al die velde en verwysings wat die kliënt benodig te inisialiseer?

Voorbeeld:Die kliënt roep 'n afgeleë metode om alle kliënte te laai.Met elke kliënt wil die kliënt hê dat die verwysing na die kliënt se lys van gekoopte artikels geïnisialiseer moet word.

Ek kan my die volgende oplossings voorstel:

  1. Skryf 'n afgeleë metode vir elke spesiale navraag, wat die vereiste velde initialiseer (bvHibernate.initialize()) en stuur die domeinvoorwerpe aan die kliënt terug.

  2. Soos 1.maar skep DTO's

  3. Verdeel die navraag in verskeie navrae, bv.een vir die kliënte, 'n tweede vir die kliënte se artikels, en laat die kliënt die resultate bestuur

  4. Die afgeleë metode neem 'n DetachedCriteria, wat deur die kliënt geskep en deur die bediener uitgevoer word

  5. Ontwikkel 'n pasgemaakte "Preload-Pattern", d.w.s.'n manier vir die kliënt om eksplisiet te spesifiseer watter eienskappe om vooraf te laai.

Was dit nuttig?

Oplossing

Ek gebruik 1 in die verlede en dit het goed gewerk.

Ander wenke

Ek dink nommer 5 is die rede waarom daar 'n "haal" klousule in HQL. Kan jy dit gebruik of is die probleem meer kompleks?

Ek het 'n kliënt wat sy 'projekte op # 5 gestandaardiseerde was en dit het gewerk baie goed. Die finale argument van 'n diens oproep was 'n komme geskeide lys van alle eiendom te laai, byvoorbeeld:

CustomerService.getCustomerById(id, "parent, address, address.city")

Ek glo dat hulle die haal klousule hiervoor gebruik. Ek geïmplementeer dieselfde idee, net een maal JPA behulp PropertyUtils om die lui laai aktiveer.

Hierdie afgeleë diens ... is dit 'n ander deel van dieselfde aansoek? indien wel, is daar geen probleem te deel klasse en stuur gevalle heen en weer (Dieselfde geld vir RMI, met behulp van stompies).

Dan is daar die opsie om toegang tot 'n web-diens of iets soortgelyks, waar die twee aansoeke kommunikeer aandeel geen klasse, en dit maak dinge nog moeiliker. Ek is op die punt om hierdie probleem in die gesig staar in die nabye toekoms, en ek sal baie graag wou weet wat die antwoord wees.

In elk geval, my stem is vir DTOs. Ek dink hulle die beste en maklikste oplossing, waar van toepassing, en help om die kode eenvoudige en onderhou.

Yuval = 8 -)

As jou afgeleë diens net bestaan ​​om jou kliënt van data te voorsien, kan dit dalk help om lui laai op al die Hibernate-entiteite af te skakel.

Persoonlik dink ek egter DTO's is die regte manier om te gaan.Deur jou afgeleë koppelvlak in terme van DTO's uit te druk, is jy seker dat jy alles kry wat jy nodig het, en niks wat jy nie verwag het nie.

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