Skomplikowane sortowanie - JPA, PostgreSQL.

0

Cześć, korzystam z JPA, Hibernate i Postgresa. W kolumnie mam dane w formacie <numerLiczacOdZera>.<rok>., np. 1.2016, 2.2016 itp.

Chciałbym posortować wyniki najpierw wg. roku, a potem po numerze porządkowym. Nie za bardzo mam pomysł jak zesplitować dane w Criteria API :/ Czy ktoś ma wiedzę by powiedzieć czy to jest w ogóle wykonalne (koniecznie przy użyciu Criteria API) ?

0

Zacznij od normalizacji bazy. Pierwsza postać normalna mówi o tym, że dane maja być atomowe ze względu na ich wykorzystanie. A ty wpychasz do jednego atrybutu DWIE dane których chcesz używać. To jest po prostu błąd i powinieneś go poprawić.
Po to sie właśnie sensownie projektuje struktury danych zeby potem nie trzeba było robic cudów na kiju.

0

Przepraszam, że nie napisałem, ale... jestem pracuję w korpo. Użytkownik może sobie zdefiniować sam wzorzec generowanych wartości, i zrobiłbym to inaczej, ale... nie mam, hmmm... siły przebicia ? Jak to Junior...

0

No to po stornie bazy tego nie zrobisz (a przynajmniej bez pisania kodu pod konkretną bazę). Wyciągnij dane a potem przetwarzaj już w jakimś serwisie który realizuje tą twoją usługę.

0

Nie nie mogłam zrozumieć, jaka idea towarzyszy forsowaniu rozwiązań, które się nie wpasowują w wymagania.. Takie zapytanie bez problemu zrobiłbyś w namedQuery, czy w natywnym SQL. Ale ponieważ tez dla korpo pracowałam, rozumiem Twój ból :D
Myślę, ze musisz poszukać mniej standardowego rozwiązania. W 99,9% wszystko da się zrobić, tylko trzeba cos wyrzeźbić.

Na pierwszy ogień spróbowałabym dodać dwa pola @transient do encji, które byłyby rozbiciem tego śmiesznego ID.

0

To nie jest jakieś tam "korpo rozwiązanie" ale problem typowej bazy z raportami, fakturami czy innymi numerowanymi druczkami. I da się to ogarnąć za pomocą w miarę przyjaznego zapytania SQL o ile wzorzec jest zawsze taki sam.

-- zakładam, że masz kolumnę email w postaci imie.nazwisko@domena - lecę z pamięci sql-ka może zawierać błędy

select imie||'.'||nazwisko||domen from 
(
select 
    substring(email from '^.*\.') as imie, 
    substring(email from '\.*.@') as nazwisko, 
    substring(email from '@*.') as domena 
from tabelka
    order by nazwisko, imie
)


Masz kolumnę email posortowaną po nazwiskach z maila.

0

Hmm, a jak w Criteria API zastapić SQL'owe 'AS' ?

0

Faktycznie, @Koziołek nas dobrze naprowadza na rozwiązanie: http://www.objectdb.com/java/jpa/query/jpql/string

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