Non so cosa sia JPA (posso cercarlo su Google; quello che voglio dire è che non lo conosco); ma:se c'è qualche speranza per gestire una query SQL e l'unico problema è tradurre una condizione su tuple, riscrivi la query in questo modo:
select city
from user
where firstname = 'a' and lastname = 'b'
or firstname = 'c' and lastname = 'd'
;
Questo è ciò che farà il motore di query con la tua query originale a prescindere; puoi guardare un PIANO SPIEGAZIONE per convincerti di questo.
Ad alcune persone piace mettere tra parentesi ogni coppia di AND
-condizioni connesse; Non lo faccio, non più di quanto userei le parentesi per 2 * 3 + 4 * 6, ma se ritieni che aggiungano chiarezza, puoi sicuramente aggiungerle.