Мы используем динамический генератор запросов HQL, который генерирует запрос, как показано ниже:
select sum(en1.amount) from SampleEntity1 as en1 where en1.child.name = ?
Hibernate преобразует вышеуказанный запрос в sql следующим образом:
select sum(tbl1.c_amount) from sampletable1 as tbl1, samplechild as child1 where tbl1.c_child = child1.c_id and child1.c_name = ?
Таблицы sampletable1 и samplechild имеют более 1 миллиона записей, и поскольку сгенерированный sql имеет перекрестное соединение, производительность запроса очень низкая и он страдает от большого количества операций ввода-вывода базы данных.
Но если мы запустим sql с использованием внутреннего соединения, запрос будет выполняться с гораздо лучшей производительностью.
Есть ли способ заставить hibernate преобразовать такие запросы HQL во внутреннее соединение вместо перекрестного?