Have you considered JPA’s @SqlResultSetMapping? Simply put, you define a POJO with fields for the columns of your result set, let JPA map the result to that POJO and then pass the POJO to Grid.
Another approach if you are using JPA is to use JPQL’s new keyword to call the constructor of your POJO direcly in JPQL. So your query will look like SELECT new MyResultPOJO(users.id, users.firstname,city.name,...) FROM ....
I hope this suffices for your use case. Please let me know if I might be of further help.