Stworzenie efektywnego zapytania w JPQL

0

Cześć
Potrzebuje stworzyć zapytanie, których warunkiem wyszukiwania jest m.in. typ obiektu (w tabeli/objekcie ObjectMain) oraz nazwa pliku (w tabeli/objekcie FileObject). Jeden z typów obiektu (Folder), który potrzebuje pobrać nie ma odzwierciedlenia w postaci pliku. Jednak jego też chcę. Zrobiłem takie zapytanie w JPQL:

Select o.id, o.type, f.name, f.location from ObjectMain o left join FileMain f on o.id=f.objectId where o.userId = ?1 and o.type in (EnumName.Folder, EnumName.PNG, EnumName.JPG) and (f.name in (EnumName.Image, EnumName.Icon) or o.type=EnumName.Folder) 

i niestety zwraca wyłącznie typy PNG i JPG. Gdy przełożyłem te zapytanie na SQLa i zapytałem bezpośrednio w bazie to bezproblemowo zwracał mi również typ Folder. Zastanawiam się co jest nie tak w tym zapytaniu i jak je inaczej napisać?

1

Przede wszystkim poleciłbym zacząć od ustawienia swojej implementacji JPA w taki sposób abyś mógł przyjrzeć się generowanym zapytaniom SQL. Hibernate dla przykładu ma dwie ciekawe opcje: show_sql i format_sql. Po ustawieniu tych opcji powinieneś wiedzieć jakie zapytania SQL są generowane na podstawie zapytania JPQL. Może Ci to ułatwić rozwiązanie problemu. Rozwiązanie dobre ale oczywiście tylko do testów (na produkcji lepiej tego nie używać).

Druga sprawa: jeżeli masz duży wpływ na projekt to poleciłbym także rozważanie użycia bibliotek takich jak QueryDSL lub jOOQ i innych tego typu. Mają to do siebie, że bardziej skomplikowane zapytania tworzy się łatwiej.

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