SELECT na liście obiektów

0

Czy można użyć jpa query select nie na tabeli z bazy danych ale na np. zwyklej liscie obiektów java?
screenshot-20220530163911.png

I zamiast tego fc, które jest normalnie jakas tabela w bazie, byłaby lista, z analogicznymi do rekordow tabeli klasami w javie?

0

A co by to miało na celu?

0

Właśnie co chcesz osiągnąć?

  • Chcesz przetestować JPA query? to poczytaj o bazie H2 lub Posgtresie w kontenerze
  • Chcesz przefiltrować listę? do tego służą streamy
0

A jak zrobić filtrowanie z uwzględnieniem .*, tyle że bez używania wyrażeń regularnych, bo niby sa złe w tym przypadku

He? nic nie zrozumiałem. Może daj jakiś przykład z kodem?

Ale to jest poboczny problem w sumie

Teraz to się boję tych głównych problemów skoro do pobocznych wyciągać chcesz taką armatę XD

UPDATE w przemyśliwaniu

w streamach odpowiednikiem select z query jest czesto metoda map lub flatMap

0
KamilAdam napisał(a):

A jak zrobić filtrowanie z uwzględnieniem .*, tyle że bez używania wyrażeń regularnych, bo niby sa złe w tym przypadku

He? nic nie zrozumiałem. Może daj jakiś przykład z kodem?

Ale to jest poboczny problem w sumie

Teraz to się boję tych głównych problemów skoro do pobocznych wyciągać chcesz taką armatę XD

UPDATE w przemyśliwaniu

w streamach odpowiednikiem select z query jest czesto metoda map lub flatMap

No po prostu wyrażenia regularne odpowiednio wpisane moga jakos mocno obciazyc serwer, ale i tak je potrzebuje przy pewnych inputach uwzglednic. Do tej pory dalo sie to zrobic dodaniem w odpowiednie miejsce % i like lower:(cos). Ale teraz wlasnie nie moge tak prosto tego zrobic. Tylko nie wiem czy ten % jpa query to tez nie jest wyrazenie regularne obciazajace serwer w sumie.

2
ToughCaptcha napisał(a):

No po prostu wyrażenia regularne odpowiednio wpisane moga jakos mocno obciazyc serwer, ale i tak je potrzebuje przy pewnych inputach uwzglednic. Do tej pory dalo sie to zrobic dodaniem w odpowiednie miejsce % i like lower:(cos). Ale teraz wlasnie nie moge tak prosto tego zrobic. Tylko nie wiem czy ten % jpa query to tez nie jest wyrazenie regularne obciazajace serwer w sumie.

Napisz dokładnie jaki problem chcesz rozwiązać, i potem się zastanowimy czy JPA, streamy, regexpy czy jakiekolwiek inne rozwiązanie będzie tutaj dobre.

0
ToughCaptcha napisał(a):

No po prostu wyrażenia regularne odpowiednio wpisane moga jakos mocno obciazyc serwer, ale i tak je potrzebuje przy pewnych inputach uwzglednic. Do tej pory dalo sie to zrobic dodaniem w odpowiednie miejsce % i like lower:(cos). Ale teraz wlasnie nie moge tak prosto tego zrobic. Tylko nie wiem czy ten % jpa query to tez nie jest wyrazenie regularne obciazajace serwer w sumie.

OK, ale co ma wyrażenie regularne do tego że chciałeś zrobić selecta z listy którą masz już w kodzie?

0
TomRiddle napisał(a):
ToughCaptcha napisał(a):

No po prostu wyrażenia regularne odpowiednio wpisane moga jakos mocno obciazyc serwer, ale i tak je potrzebuje przy pewnych inputach uwzglednic. Do tej pory dalo sie to zrobic dodaniem w odpowiednie miejsce % i like lower:(cos). Ale teraz wlasnie nie moge tak prosto tego zrobic. Tylko nie wiem czy ten % jpa query to tez nie jest wyrazenie regularne obciazajace serwer w sumie.

Napisz dokładnie jaki problem chcesz rozwiązać, i potem się zastanowimy czy JPA, streamy, regexpy czy jakiekolwiek inne rozwiązanie będzie tutaj dobre.

Chyba moj najbardziej podstawowy problem na ten moment jest taki, że potrzebuje filtrować i po czymś co jest tylko w bazie i po czymś co jest tylko w javie i tego jest sporo, na tyle sporo, że jak nie dam limit w samym sql to mi się to w ogóle nie chce załadować, a potrzebuje też uwzględnić odpowiedni limit wyświetlonych rekordów. Na razie też w ogóle nie wiem jak javie uzyskać cała listę tego wszystkiego.

0
ToughCaptcha napisał(a):
TomRiddle napisał(a):
ToughCaptcha napisał(a):

No po prostu wyrażenia regularne odpowiednio wpisane moga jakos mocno obciazyc serwer, ale i tak je potrzebuje przy pewnych inputach uwzglednic. Do tej pory dalo sie to zrobic dodaniem w odpowiednie miejsce % i like lower:(cos). Ale teraz wlasnie nie moge tak prosto tego zrobic. Tylko nie wiem czy ten % jpa query to tez nie jest wyrazenie regularne obciazajace serwer w sumie.

Napisz dokładnie jaki problem chcesz rozwiązać, i potem się zastanowimy czy JPA, streamy, regexpy czy jakiekolwiek inne rozwiązanie będzie tutaj dobre.

Chyba moj najbardziej podstawowy problem na ten moment jest taki, że potrzebuje filtrować i po czymś co jest tylko w bazie i po czymś co jest tylko w javie i tego jest sporo, na tyle sporo, że jak nie dam limit w samym sql to mi się to w ogóle nie chce załadować, a potrzebuje też uwzględnić odpowiedni limit wyświetlonych rekordów. Na razie też w ogóle nie wiem jak javie uzyskać cała listę tego wszystkiego.

Co masz na myśli mówiąc sql to mi się to w ogóle nie chce załadować? Nic nie rozumiem z tego co napisałeś.

Możesz opisać dokładniej problem?


Poprzednia treść:

Jeśli dobrze rozumiem, to na podstawie tego co mówisz sql to mi się to w ogóle nie chce załadować (nie wiem swoją drogą jak to rozumieć - aplikacja się wyłącza, leci wyjątek, dostajesz 0 recordów, czekasz w nieskończonośc, baza siada? co dokładnie? Co to znaczy "nie chce załadować"?), to chodzi w jakiś sposób o to że ładujesz za dużo recordów na raz, i dlatego chcesz je wyfiltrować?

Bo jeśli tak, to możesz zrobić SELECTa, z tym w WHERE co możesz, i ustaw odpowiedni OFFSET oraz LIMIT, tyle ile dasz radę wczytać. Zmapuj to na obiekty w javie, przefiltruj je. Jeśli nadal masz za mało recordów, to zrób kolejnego selecta z kolejnym OFFSET i LIMIT. Musisz oczywiście zapewnić że ten SELECT będzie miał taką samą kolejność recordów, czyli albo tabela zwykła, a jeśli to jest widok to jakiś ORDER BY.

1

Mozliwości jest wiele, ale żadna z nich nie będzie pewnie tak łatwa jak JPA na materiałach propagandowych:

  • Możesz załadować dane z javy do tabeli tymczasowej żyjącej tylko czas twojej sesji, ale to jest pewnie bez sensu
  • Możesz spróbowac iżyć in, może się uda się te wartości z Javy przepchnąć do SQLa

To co chcesz zrobić jest pewnie wykonalne i skończy się jakimś gigantycznym warunkiem where, ale bez szczegółów tylko tu zgadujemy

0

Ok, wydaje mi się, że in nie podziała w ogóle. Mogę coś podziałać offsetem i limitem. Została jeszcze kwestia .* a % w jpa, czy to się różni, czy % można używać na serwrze, jaka jest alternatywa dla % w javie oprócz wyrażeń regularnych.

0
ToughCaptcha napisał(a):

jaka jest alternatywa dla % w javie oprócz wyrażeń regularnych.

Zależy na czym używasz tego %. Co mi przychodzi do głowy to:

  • Zmienić model bazy (podzielić to co przeszukijesz na tokeny i zbudować indeks do tego)
  • Użyć to tego zewnętrznego narzedzia jak elastic search
  • Użyć wbudowanego w bazę danych narzędzia do przeszukiwania tekstu. W posgresie jest to Full Text Search
0
ToughCaptcha napisał(a):

Ok, wydaje mi się, że in nie podziała w ogóle. Mogę coś podziałać offsetem i limitem. Została jeszcze kwestia .* a % w jpa, czy to się różni, czy % można używać na serwrze, jaka jest alternatywa dla % w javie oprócz wyrażeń regularnych.

Napisz.

Po prostu.

Co próbujesz osiągnąć dokładnie.

1

@ToughCaptcha:

Więcej ukrywasz niż podajesz.
... ale refren o wyrażeniach regularnych we mnie budzi intuicję, ze coś powinno być na wcześniejszych etapach przetworzone do danych "konkretnych", a nie było.

1

Odpowiednik javowy dla sqlowego % to po prostu... String.startsWith(), String.endsWith().

2

Jest taka biblioteka https://github.com/npgall/cqengine
która implementuje typowe bazodanowe indeksy i pozwala wydajnie przeszukiwać obiekty w pamięci.

IMO raczej nie jest Ci potrzebna. W typowych przypadkach (obiektów do przeszukania jest do 100000) zwykłe startsWith, endsWith, contains przeważnie jest zupełnie wystarczające (oczywiście - to zależy jeszcze od konkretnych wymagań).
Poza tym, niestety, też zupełnie nie rozumiem Twojego polskiego i tego z czym tak naprawdę się borykasz.

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