Pobór pól poza transakcją

0

Ech... nie wiem czy zostanę prawidłowo zrozumiany, bo nie do końca ogarniam co się dzieje.

Mam aplikacje klient-serwer z Spring, Jersey, JPA, Hibernate itp. Projekt w stylu microservices z warstwami api, web i repozytoriow na bazie danych.
Mam encje i web modele podobne do encji, ale są obiektami, które przedstawiają to co widać na stronie), web modele mam w podprojekcie, z którego można korzystać jako część wspólna.W projekcie mam również funkcje transformujące z entity na web model ( i na odwrót też będą) .

Mam problem z tym, że jeden web model ma listę innych web modeli (mogą być nullem ). Używam fetchtype.LAZY (EAGER może by zadziałało).
Gdy docieram do warstwy repozytoriów (crudrepository itp.) i chcę pobrać cały web model z nieszczęsnymi listami, dokonuje tu też transformacji z entity na web model.
Ale problem w tym, że te listy będą zawsze poza transakcją i ich nie pobiorę.

Jak się do tych list dobrać? Przy użyciu HQL? Czy może ich encje też musze poprzetwarzać na web modele i dodać jako listę do wyższego web modelu?

Próbuje zadać pytanie ale pewnie nie zrozumiecie o co mi chodzi ech :P

0

Ale tak czy s@!k musisz zrobić zapytanie które odbędzie się w transakcji także... musisz je pobrać jeżeli będziesz wiedział że w tym przypadku ich potrzebujesz, samo getList() nie wystarczy, provider i tak może podać obiekty które są pod spodem proxy, http://piotrnowicki.com/2012/10/fetch-join-is-still-a-join/

0

Dzięki, spróbuję.

Gratuluję zdolności dedukcji przy moim zawiłym tłumaczeniu :p

0

i przy okazji, jak ściągasz dane których nie edytujesz, możesz to robić poza transakcją - provider może wyczaić taki przypadek i nie zarządzać tymi obiektami w persistence contexcie (+1 do performencu)

0

A to możliwe, że coś takiego działa?

Entity entity = entityManager.find(Entity.class, EntityId);

Test mi przeszedł i mam 'wtf'...
pewnie przeszło ale te listy pewnie i tak są nieosiągalne bo tego akurat nie przetestowałem.

0

ok, dzięki.
Ale co wtedy z tymi listami? nie trzeba żadnego JPQLa robic?
jakiegos tam zrobilem ale mialem problem z typem danuych.

Przy okazji chcialbym spytac.
A ogolnie ktos mi jest w stanie wyjasnic relacje miedzy entity a web modelem?
Mozna o tym gdzies poczytac? bo mam braki. Po prostu nie do konca wiem co sie dzieje w tych wszystkich warstwach i kiedy co trzeba transformowac z jednego modelu na drugi.

Czy zawsze najpierw musze stworzyc entity a pozniej web model czy moge od razu dostac web model od klienta?

sorry za chaotyczne i pewnie durne pytania ale z wieloma rzeczami mam 1 raz stycznosc.

0

pisząc web model masz na myśli ** Data transfer object** ? jeżeli tak,to powinno się stosować i dobrze jest to robić, https://www.google.pl/?gws_rd=ssl#q=data+transfer+object+java

Nie rozumiem stwierdzenia "tymi listami", jak robisz tego fetch joina, czyli mówisz że chcesz np: user'a i jego komentarze (user.getComments()) i wiesz że to masz.

0

web model to niby odwzorowanie bezpośrednio tego co jest na ekranie...
Są podobne do encji ale nie w 100% takie same. Wiec w zasadzie jesli nie będzie w nich zadnej logiki napisanej to chyba są to DTO.
Ale konwencja nazewnictwa w projekcie nie do końca na to wskazuje bo tylko niewielka część z nich jest nazwana 'dto' i są w osobnej paczce...

No właśnie chodzi o to, że ostatecznie nie zrobiłem tego fetch joina tylko entitymanager.find i zwrocilem ID tej encji, co tylko starczy pewnie na chwile.
Czyli jednak musze takiego fetch joina zrobic w jpql.

Mialem zapytanie w tym stylu:
SELECT a FROM Author a JOIN FETCH a.articles ar where ar.authorId=?1 , i setParameter podajac Id authora.
ale pewnie je zle zrobilem...

dzięki.

0
Biały Mleczarz napisał(a):

web model to niby odwzorowanie bezpośrednio tego co jest na ekranie...
Są podobne do encji ale nie w 100% takie same. Wiec w zasadzie jesli nie będzie w nich zadnej logiki napisanej to chyba są to DTO.
Ale konwencja nazewnictwa w projekcie nie do końca na to wskazuje bo tylko niewielka część z nich jest nazwana 'dto' i są w osobnej paczce...
.

Jak masz jpa w projekcie to będzie to DTO jeżeli nie będzie @Entity na klasie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1