Попробуйте:
SELECT j, j.history FROM Job j JOIN User u WHERE u.name = :name
Если бы я делал это в EclipseLink, я бы немного его изменил:
public List<Job> getAllJobsForUser(String username) {
List<Job> jobs = entityManager
.createQuery("SELECT j FROM Job j JOIN User u WHERE u.name = :name")
.setParameter("name", username)
.setHint(QueryHints.BATCH, "j.history")
.queryForList();
}
Разница? В первой версии вы возвращаете два объекта, поэтому вам нужно извлечь их из массивов List или Object, тогда как во второй подсказка запроса просто загружает все истории заданий из (предположительно) ленивого отношения один ко многим .
Я не знаю, есть ли у Hibernate аналог этого. Toplink Essentials не имеет. Но это одна из моих любимых функций EclipseLink.
О, и, очевидно, вы можете (и, вероятно, должны) использовать именованный запрос вместо запроса adhoc, как я делал (поскольку это можно проверить во время сборки).