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结束。 我宁愿自己制作参考表。

链接地址: http://www.djcxy.com/p/24343.html

上一篇: Hibernate/Gorm query with distinct results and JOIN on non primary key

下一篇: grails belongsTo map to property in another class