【发布时间】:2011-11-21 19:44:12
【问题描述】:
我有一个这样的 JPQL:
select distinct d
from Department d
left join fetch d.employees
当我想获取我的 Department 实体的惰性属性之一时,distinct 不再起作用。
select distinct d, substring(d.htmlDescription, 1,400)
from Department d
left join fetch d.employees
查询返回的部门数量与其中的员工数量一样多。
substring(d.htmlDescription) 很重要,因为该属性被定义为 CLOB(在 postgresql 下键入 TEXT):
@Column(columnDefinition = "TEXT")
@Basic(fetch = FetchType.LAZY)
String htmlBody;
子字符串函数在 sql 中翻译,因此限制了数据库和 Web 服务器之间传输的数据量。
作为一种解决方法,我尝试将查询分为两部分:
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 子句中使用。
【问题讨论】:
标签: java hibernate jpa jpa-2.0 jpql