【发布时间】:2018-04-04 20:54:37
【问题描述】:
我正在尝试解决一个问题,即我正在重写查询以删除重复项并添加当前通过 criteria.list 构造的条件
def criteria = Employee.createCriteria()
criteria.list(offset: offset, max: max) { ... }
我有以下领域类(简写)
class Employee {
static hasMany = [
jobs: EmployeeJob,
]
}
class EmployeeJob {
Employee employee
Company company
}
class Company {
static hasMany = [
addresses: Address,
]
}
我允许用户输入公司地址的文本,因此如果员工与同一县的两个地址相关联,则查询将返回两行。
在这张罚单之前,我不需要带回与员工相关的公司,但现在这是一项要求。
我试图用 HQL 重写查询,因为这是过去所做的以消除重复但仍然能够轻松分页。事情进展顺利,直到我添加了对 Company join 的最终约束。
在我的约束之前的 from 子句中
fromClause += "left join e.jobs as jobs left join jobs.company as company"
但我需要加入与公司主键无关的条件
"left join e.jobs as jobs left join jobs.company as company with company.scope = :scope"
我相信除了主键之外我不能加入任何东西
org.hibernate.hql.internal.ast.InvalidWithClauseException
with clause can only reference columns in the driving table
我已尝试在原始条件查询中添加内容
resultTransformer Criteria.DISTINCT_ROOT_ENTITY
确实删除了重复项,但 pagedResults.getTotalCount() 仍然包含重复项。另一个 SO 用户:
使用 ResultTransformer 时,hibernate 在 SQL 查询中不包含 DISTINCT,所以我们遇到了分页(限制/偏移)的麻烦
我试过了:
Projections.groupProperty("id")
但结果只包含 id。
我已经试过了:
projections {
sqlGroupProjection '...', '..', [...], [...]
}
而且我相信它只是在语法下降后才带回我分组的列。
Hibernate 版本是 4.3.8.1。
有没有我遗漏的方法,或者其中一种方法似乎可行?
在我看来,除了下拉和编写原始 SQL 之外,我找不到任何其他方法。
【问题讨论】:
标签: hibernate grails hql grails-orm