Nie dostaję wyników w prostym zapytania JPA Query.

0

Zapytanie, które nie zwraca mi wyników:

@NamedQuery(name="Order.requestsForMyMaterial", query="SELECT o FROM Order o WHERE o.part.partOwner = :user OR o.sampleorder.depositOwner = :user")  

Natomiast dwa osobne zapytania zwracają mi poprawnie wynik zawarty w WHERE, ale połączone warunki OR nie dają rezultatów.

@NamedQuery(name="Order.requestsForMyMaterial", query="SELECT o FROM Order o WHERE o.part.partOwner = :user")  
@NamedQuery(name="Order.requestsForMyMaterial", query="SELECT o FROM Order o WHERE o.sampleorder.depositOwner = :user")  
0

Sprawdź co jest generowane pod spodem - jaki SQL idzie do bazy. IMO, robiony jest jakiś "dziwny" JOIN, który wycina dane.

0

Tworzony jest taki SQL:

SELECT t1.IDORDER,
       t1.DATE,
       t1.INFOSTATUS,
       t1.ORDERTYPE,
       t1.RECEIPTDATE,
       t1.REQUESTEDMASS,
       t1.RETURNINGMASS,
       t1.RETURNINGMASSEL,
       t1.STATE,
       t1.STATEPNMBEFORE,
       t1.STATEQUANTITYBEFORE,
       t1.USERGOAL,
       t1.WAREHOUSEPNMBEFORE,
       t1.WAREHOUSEQUANTITYBEFORE,
       t1.WASTEPNMBEFORE,
       t1.WASTEQUANTITYBEFORE,
       t1.ordering,
       t1.part,
       t1.sampleorder
FROM Part t0,
     Sample t2,
     Orderr t1
WHERE (((t0.partOwner = ?)
        OR (t2.depositOwner = ?))
       AND ((t0.IDPART = t1.part)
            AND (t2.IDSAMPLE = t1.sampleorder)))

Zmieniłem nawet zapytanie, by nie porównywać obiektu tylko id:

SELECT o FROM Order o WHERE o.part.partOwner.idUser = :user OR o.sampleorder.depositOwner.idUser = :user 

Wytwarzany SQL to:

SELECT t1.IDORDER,
       t1.DATE,
       t1.INFOSTATUS,
       t1.ORDERTYPE,
       t1.RECEIPTDATE,
       t1.REQUESTEDMASS,
       t1.RETURNINGMASS,
       t1.RETURNINGMASSEL,
       t1.STATE,
       t1.STATEPNMBEFORE,
       t1.STATEQUANTITYBEFORE,
       t1.USERGOAL,
       t1.WAREHOUSEPNMBEFORE,
       t1.WAREHOUSEQUANTITYBEFORE,
       t1.WASTEPNMBEFORE,
       t1.WASTEQUANTITYBEFORE,
       t1.ordering,
       t1.part,
       t1.sampleorder
FROM Part t0,
     Sample t2,
     Orderr t1
WHERE (((t0.partOwner = ?)
        OR (t2.depositOwner = ?))
       AND ((t0.IDPART = t1.part)
            AND (t2.IDSAMPLE = t1.sampleorder)))

o.part i o.sampleorder jest nullable jeśli to ma znaczenie.

Jak zapisać JPQLa by uzyskać efekt którego szukam?

0

Jawnie określ JOIN'y

SELECT o FROM ORDER o JOIN o.part p JOIN p.partOwner po WHERE po.idUser = :USER OR o.sampleorder.depositOwner.idUser = :USER

0
Szczery napisał(a):

Jawnie określ JOIN'y

SELECT o FROM ORDER o JOIN o.part p JOIN p.partOwner po WHERE po.idUser = :USER OR o.sampleorder.depositOwner.idUser = :USER

Zmieniłem zapytanie na takie i też nie otrzymałem żadnego wyniku. SQL:

SELECT t1.IDORDER,
       t1.DATE,
       t1.INFOSTATUS,
       t1.ORDERTYPE,
       t1.RECEIPTDATE,
       t1.REQUESTEDMASS,
       t1.RETURNINGMASS,
       t1.RETURNINGMASSEL,
       t1.STATE,
       t1.STATEPNMBEFORE,
       t1.STATEQUANTITYBEFORE,
       t1.USERGOAL,
       t1.WAREHOUSEPNMBEFORE,
       t1.WAREHOUSEQUANTITYBEFORE,
       t1.WASTEPNMBEFORE,
       t1.WASTEQUANTITYBEFORE,
       t1.ordering,
       t1.part,
       t1.sampleorder
FROM Sample t3,
     USER t2,
          Orderr t1,
          Part t0
WHERE (((t0.partOwner = ?)
        OR (t3.depositOwner = ?))
       AND (((t0.IDPART = t1.part)
             AND (t3.IDSAMPLE = t1.sampleorder))
            AND (t2.IDUSER = t0.partOwner)))

Póki co zrobiłem dwa odrębne zapytania i je połączyłem (suma List), aczkolwiek to niezbyt eleganckie rozwiązanie.

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