создать запрос удалить в горм - PullRequest
0 голосов
/ 12 декабря 2018

Доброе утро, мне нужно выполнить следующий запрос к серверу SQL в Grails Hibernate (Gorm).Я не понимаю, как выполнить верхнюю часть запроса

("delete CORE_NOTIFICATIONS where id in (select top 1000 ID form CORE_EVENT where date <10)")

В Горм я так сделал, но выдает ошибку

query = "delete CoreNotifications CN where CN.event_id in (select top? ID from CoreEvent CE where CE.date <?)"
res = CoreNotifications.executeUpdate (query, params)

В чем моя ошибка?

1 Ответ

0 голосов
/ 12 декабря 2018

По моему опыту, вы, вероятно, будете использовать GORM для удаления записей, представляющих интерес.Ниже приведен фрагмент кода, который я использовал для своего проекта.Как вы упомянули в комментарии ниже, рекомендуется параллелизм, потому что таблица содержит три миллиона записей.

Date specifiedDate = Date.parse("yyyy-MM-dd hh:mm:ss", "2010-04-03 1:23:45") // pass your date here by extrating from params
def result = CoreEvent.where { date < specifiedDate }
List<Integer> iDs = result.list(sort: "date").collect { it.id }

GparsPool.withPool {

   iDs.eachParallel {
      // we need to wrap inside a single transaction for parallelism
      CoreNotifications.withTransaction {
         CoreNotifications.where { id == it }.deleteAll()
      }
   }
}

Я надеюсь, что этот код поможет вам решить вашу проблему ожидаемым образом.

...