Давайте угадаем. Один запрос, который выбирает эти идентификаторы X, Y, а затем 1 запрос для X, чтобы загрузить другие его поля (в конструкторе Foo), а затем 1 запрос для Y, чтобы загрузить другие его поля (при доступе в конструкторе Foo).
Очевидно, вы могли бы легко сделать
SELECT new Foo(x.id, x.field2, x.field3, y.id, y.field2) FROM X join X.y as Y ...
и это (с DataNucleus JPA) сделает один SELECT.