Skip to content

Язык запросов HQL

HQL - упрощённый диалект запросов к данным по выделенным объектам доступа, является эквивалентом WHERE-части в SQL.

Общий вид обращения выглядит как поле.оператор(значение), к примеру

1
SKU_INVENTORY.find(stock_qty.eq(5)) - означает “отобрать все элементы, stock_qty которых равно 5

Допустимы следующие операторы сравнения:

  1. eq(number) - Равенство (=)
  2. gt(number) - Больше чем (>)
  3. lt(number) - Меньше чем (<)
  4. nl(number) - Не менее чем (>=)
  5. ng(number) - Не более чем (<=)
  6. in(D1,...,DN) - Вхождение в множество D1,..,DN

Допустимы любые логические формы с AND и OR:

1
SKU_INVENTORY.find("(stock_qty.gt(5) AND stock_qty(10)) OR stock_qty.eq(1)") 

В params метода find() можно указывать order и limit 

1
SKU_INVENTORY.find("(stock_qty.gt(5) AND stock_qty(10)) OR  stock_qty.eq(1)", { ["order"]="stock_qty ASC", ["limit"]="100"} ) 
Успешность выполнения find() можно проверить с помощью метода exists()

Далее, работа с полученными данными осуществляется последовательным перебором доступа к элементам списка с помощью метода .next()