Я использую довольно старую версию Hibernate (3.2.4), так что, возможно, это связано с этим. К сожалению, требования проекта не позволяют мне обновиться.
У меня есть класс Foo с ассоциацией «многие к одному» с Баром Ассоциация помечена:
lazy="false" fetch="join"
Теперь, когда я делаю что-то вроде:
em.find(Foo.class, id);
Я получаю ожидаемый результат: оператор single , соединяющий таблицу FOO с таблицей BAR. Тем не менее, когда я пытаюсь что-то вроде:
em.createQuery("select f from Foo where f.id = :id")
.setParameter("id", id)
.getSingleResult();
Я получаю одиночное соединение с последующим дополнительным запросом выбора к BAR. Второй запрос выглядит как совершенно лишним ; все данные, необходимые для быстрого заполнения экземпляра Foo, должны были быть доступны при первоначальном объединении. Это выглядит примерно так:
select f.id, f.xyz, ..., b.id, b.xyz, ...
from foo f
join bar b on b.id = f.bar_id
where f.id = ?
select b.id, b.xyz, ...
from bar b
where b.id = ?
Есть мысли?