Grails 3 / GORM удаляют отдельные записи из результата - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь добиться следующего при вызове ajax из текстового поля в контроллер:

  1. Получить список двигателей в соответствии с критериями из текстового поля
  2. Вычеркнуть определенные значения из результирующего списка: те двигатели, которые содержатся внутри Otherdomain (и отвечают определенным критериям), не должны быть частью окончательного результата

Правильно ли подходит мой подход? Что такое недостающий кирпич? Конечно, количество результатов будет 30 минус количество результатов выбывания; хотя было бы лучше, если бы общее число строк было бы точно 30.

Этим вызовом я пытаюсь сократить время поиска по большому количеству строк в таблице Motor.

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

Заранее благодарен за любую подсказку

1 Ответ

0 голосов
/ 22 января 2019

После еще одного исследования HQL и с помощью комментария @ 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. С моим первым подходом я, вероятно, столкнулся бы с этим.

...