Hibernate / Gorm查询具有不同的结果,并在非主键上JOIN
我试图解决一个问题,我正在重写查询以删除重复项并添加当前通过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中重写查询,因为这是过去的做法,以消除重复,但仍然能够轻松分页。 事情进展顺利,直到我加入对公司加入的最后限制。
在我的约束条件之前,我有
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"
我相信除了主键之外,我不能加入其他任何东西
Hibernate票
org.hibernate.hql.internal.ast.InvalidWithClauseException
with clause can only reference columns in the driving table
相关SO贴
我曾尝试向原始条件查询中添加内容
resultTransformer Criteria.DISTINCT_ROOT_ENTITY
这确实删除了重复项,但pagedResults.getTotalCount()仍包含重复项。 每隔一个SO用户:
当使用ResultTransformer时,hibernate在SQL查询中不包含DISTINCT,所以我们陷入寻呼(限制/偏移)
我努力了:
Projections.groupProperty("id")
但结果只包含id。
我曾尝试过:
projections {
sqlGroupProjection '...', '..', [...], [...]
}
我相信它只会在语法结束后带回我分组的列。
休眠版本是4.3.8.1。
有没有这样做的方法,我失踪或其中一个似乎可行?
在我看来,除了下拉和编写原始SQL以外,我找不到其他任何方法。
使用HQL
,你可以做下面的事情
def query = "select distinct(e) from Employee e " +
"left join e.jobs j " +
"left join Company c on c.id = j.company.id and c.scope = :scope"
Employee.executeQuery(query, args)
注意: join e.jobs
将以两个joins
结束。 我宁愿自己制作参考表。
上一篇: Hibernate/Gorm query with distinct results and JOIN on non primary key