2013-04-27 10 views
14

Przyjęto Mam następujący HQLKorzystanie hibernacji nazwany parametr dwukrotnie

EntityManager.createQuery("SELECT a FROM a WHERE a.b = :par OR a.c = :par").setParameter("par", obj); 

wydaje się nie działać. Czy ktoś ma pomysł, jak rozwiązać ten problem, pozostając przy użyciu tylko jednego parametru?

+0

Jakiego błędu dostałeś? –

+0

Brak błędu. Lista wyników jest po prostu pusta. – DmiN

+0

czy masz prawidłowe dane? spróbuj włączyć - showsql = true w persistence.xml i uzyskać surowe dane sql – Sanath

Odpowiedz

20
setParameter(String name,Object val) 

Służy do powiązania wartości z podanym parametrem. Ale nazwa może występować wiele razy w zapytaniu, które nie ma znaczenia. Sprawdź więc, czy masz naprawdę dane dla tego zapytania.

sprawdzić dokumentację here

Niektóre główny tekst z tej dokumentacji

nazwane parametry zapytań są żetony postaci: nazwa w ciągu kwerendy. Wartość jest przypisana do parametru integer: foo przez wywołanie setParameter ("foo", foo, Hibernate.INTEGER); na przykład. Nazwa może pojawić się wiele razy w ciągu zapytania.

Jeśli nadal u nie uzyskać wynik a potem po prostu spróbować z pomocą dwóch nazwisk i ustawić go

EntityManager.createQuery ("SELECT FROM WHERE ab =: PAR1 lub AC =: par2") .setParameter ("par1", obj) .setParameter ("par2", obj);

+0

To jest całkowicie poprawne. Wygląda na to, że zapytanie było zepsute. DBMS ma pustą listę wyników również za pośrednictwem natywnego sql. +1 Do tego dobrego opisu – DmiN

Powiązane problemy