Grails рассчитывает поле в SQL - PullRequest
2 голосов
/ 31 января 2011

У меня есть домен

class InvoiceLine {

String itemName
BigDecimal unitCost
Integer quantity
}

}

Я хотел бы придумать замыкание Грааля, используя .withCriteria, который агрегирует (количество единиц), так что я получаю sql

select item_name, sum(unit_cost * quantity) from invoice_line group by item_name;

На данный момент лучшее, что я мог придумать, это

def result = InvoiceLine.withCriteria {

        projections {
            groupProperty('itemName')
            sum ('quantity * unitCost')
        }
    }

К сожалению, Grails захлебывается, когда я запускаю код выше. У кого-нибудь есть идеи, как мне достичь своей цели? Любая помощь высоко ценится.

1 Ответ

1 голос
/ 01 февраля 2011

Это должен быть критерий запроса? HQL прекрасно работает здесь:

def result = InvoiceLine.executeQuery(
  "select itemName, sum(unitCost * quantity) " + 
  "from InvoiceLine " +
  "group by itemName")

Результатом будет List из Object[], где 1-й элемент - это строка (имя), а 2-й - это число (сумма), поэтому, например, вы можете повторить что-то вроде

results.each { row ->
   println "Total for ${row[0]} is ${row[1]}"
}
...