Как я могу избежать избыточности в почти идентичных критериях? - PullRequest
1 голос
/ 19 мая 2011

Представьте, что у меня есть следующий запрос:

def result = Test.createCriteria().list(params) {
     // image here a lot of assocs, criterias, ...
}

Во многих случаях вам нужно количество строк в запросе выше, например, список действий многих контроллеров.

def resultTotal = Test.createCriteria().list(params) {
     // Imagine here a lot of assocs, criterias, ...
     // Change to the criteria above is only the projection block
     projections { rowCount() }
}

Как можноЯ избегаю этого?

Ответы [ 4 ]

0 голосов
/ 24 октября 2012

Я использую totalCount так:

def list() {
    def myInstanceList = MyInstance.createCriteria().list(params){
        eq('name', params.name)
    }
    [myInstanceList: myInstanceList, myInstanceListTotal: myInstanceList.totalCount]
}
0 голосов
/ 19 мая 2011

Если вы не разбиваете на страницы результаты запроса, вы можете просто сделать следующее после вызова первого запроса:

def resultTotal = result?.size()
0 голосов
/ 20 мая 2011

Для одного и того же набора запросов, используемых во многих местах, я создаю их как замыкание и изменяю его делегат на рассматриваемые критерии. Например:

def query = {
   projections{
       rowCount()
     }
   eq('type', myType)
  }

 def criteria = Customer.createCriteria()
        query.delegate = criteria
        myType = CustomerType.guest
        List records = criteria.list(params) {
            query()
        }
0 голосов
/ 19 мая 2011

Вы можете:

  1. Извлечение создания критерия в условный метод фабрики / застройщика;
  2. Использовать именованных запросов ;
  3. Используйте именованные параметры запроса (и Groovy-код!), Чтобы изменить запрос «на лету», например:

.

static namedQueries = {
    byLocation { Location location ->
        if (location) {
        ... // some more criteria logic
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...