6

Mam dwa pola wyszukiwania daty, a mianowicie zi do. Muszę pobrać rekordy z tabeli użytkowników, których startDate leży między datami od i do wpisanych w polach wyszukiwania i jeśli daty od i do są zerowe, muszę pobrać wszystkie rekordy z tabeli użytkownika.Jak dynamicznie wyszukiwać między dwoma datami w hql?

Próbowałem następującą kwerendę HQL:

FROM USER 
WHERE 
:start_flag =1 
OR 
STARTDATE between :from and :to 

Tutaj start_flag jest typu int, który jest ustawiony na 1, jeżeli zi są nieważne.

query.setParameter("from",startDt); 
query.setParameter("to",endDt); 
query.setParameter("start_flag",startFlag); 
l= query.list(); 

Oto typy danych są następujące:

startDt - java.util.Date

endDt- java.util.Date

startFlag- int

Kiedy uruchamiam powyższe zapytanie z do iz równym zeru Otrzymuję następujący wyjątek:

SQL Error: 932, SQLState: 42000

ORA-00932: niespójne datatypes: Przewidywana data dostał BINARY

mógłbyś mi powiedzieć jak napisać kwerendę HQL Aby osiągnąć powyższe funkcjonalności?

+0

Próbowałaś 'setDate' (lub coś podobnego) zamiast' setParameter'? Czy typy dat są poprawnie odwzorowane na kolumnę daty (lub czy przypadkowo została zserializowana)? –

+0

Nie Nie wypróbowałem setDate() ale domyślam się, że setParameteer() powinien działać – user2077648

+0

W moim doświadczeniu z NHibernate, to nie działa. –

Odpowiedz

9

filtr to tak:

String query = "FROM USER WHERE :start_flag =1 "; 
if(startDt!=null && endDt!=null){ 
    query +="OR STARTDATE between :start_date and :end_date"; 
} 

TypedQuery<USER> hql = entityManager.createQuery(query); 

if(startDt!=null && endDt!=null){ 
    hql.setParameter("start_date",startDt).setParameter("end_date",endDt); 
} 
List<USER> result = hql.setParameter("start_flag",startFlag).list(); 
+0

Przepraszam, że był błąd w pisaniu, to nie jest rozwiązanie, nie będzie działać – user2077648

+0

, a następnie go odfiltrować, edytuje moją odpowiedź na przykład: – Angga

+0

Dynamiczne budowanie zapytań typu przy użyciu API Kryteriów jest bardziej odpowiednie. http://docs.oracle.com/javaee/6/tutorial/doc/gjitv.html – dbricman