У меня есть JPQL, подобный этому:
select distinct d
from Department d
left join fetch d.employees
Когда я хочу получить одно из ленивых свойств моего объекта Department, значение не работает больше .
select distinct d, substring(d.htmlDescription, 1,400)
from Department d
left join fetch d.employees
Запрос возвращает столько Департамента, сколько в нем сотрудников.
Значение substring(d.htmlDescription)
важно, поскольку свойство определено как CLOB (тип TEXT в postgresql):
@Column(columnDefinition = "TEXT")
@Basic(fetch = FetchType.LAZY)
String htmlBody;
Функция подстроки переведена в sql, что ограничивает объем данных, передаваемых между базой данных и веб-сервером.
В качестве обходного пути я попытался разбить запрос на две части:
select d, substring(d.htmlDescription, 1,400)
from Department d where d in (
select distinct d1
from Department d1 left join fetch d1.employees
)
Это не работает, потому что JOIN FETCH
нельзя использовать в предложении FROM
подзапроса.