Grails 3 / GORM 从结果中踢出单个记录

Grails 3 / GORM kick out single records from result

我试图在从文本字段到控制器的 ajax 调用中实现以下目标:

  1. 根据文本字段中的条件获取电机列表
  2. 从结果列表中剔除某些值:Otherdomain 中包含的那些电机(并满足特定条件)不应成为最终结果的一部分

我的做法对吗?缺的砖是什么? 当然,结果数将是 30 减去踢出结果数;如果总行数恰好是 30 行就更好了。

通过这个调用,我试图减少对电机中大量线路的搜索时间 table。

def criteria =  Motor.createCriteria()
def motorlist = criteria.list {
    like ("motornumber", "%" + params.search + "%")
    maxResults(30)
    order("motornumber","asc")
}
motorlist.each { mt ->
    Otherdomain.findByMotor(mt).each { rd ->
        if (rd.kickoutCriteriaIsTrue) {
            // REMOVE MOTOR from result "motorlist" needed
        }
    }
}

response.setContentType("application/json")
render motorlist as JSON

提前感谢您的任何提示

在对 HQL and with the help of @Daniel 的评论进行更多研究后,我最终使用了这个,对此我非常满意:

def reparaturstatuserledigt = Reparaturstatus.findByStatus('done')
def hqlstring = "SELECT m " + \
    "FROM Motor m " + \
    "WHERE m.motorennummer LIKE :searchterm AND " +
        "m not in (SELECT motor FROM Reparaturdetail rd WHERE rd.motor = m and rd.detailstatus <> :detailstatus)"
def motorlist = Motor.executeQuery(hqlstring, [detailstatus: reparaturstatuserledigt, searchterm:'%'+params.search+'%', max: 30, offset: 0])
response.setContentType("application/json")
render motorlist as JSON

值得注意的是,我使用了命名参数 searchterm 来防止 SQL 注入。使用我的第一种方法,我可能会对此进行 运行。