0) Я всегда использую предложение select, потому что оно позволяет указать, что вы хотите выбрать, и в любом случае является обязательным в JPQL. Если вы хотите выбрать менеджеров с их проектами, используйте
select distinct m from Manager m left join fetch m.projects
Если не использовать отдельное ключевое слово, список будет содержать n экземпляров каждого менеджера (n - количество проектов менеджера): Hibernate возвращает столько элементов, сколько строк в наборе результатов. *
1) Если вы хотите избежать проблемы n + 1, выберите другую ассоциацию в том же запросе:
select distinct m from Manager m
left join fetch m.projects
left join fetch m.boss
Вы также можете настроить пакетную загрузку для загрузки 10 боссов (например) в тот момент, когда к первому боссу обращаются. Ищите «пакетная загрузка» в справочном документе.
2) Весь API Hibernate не генерируется. Это было сделано на JDK 1.4, до дженериков. Это не значит, что это бесполезно.
3) Нет. Параметры HQL-запроса, в конце концов, являются подготовленными параметрами оператора. Для этого вы должны использовать конкатенацию строк.