Вы также можете выполнить Именованный запрос, чтобы получить последнее максимальное значение Pixes
, которое будет работать в сценариях, где в порядках отображения есть скачки и скачки.
class Widget {
static hasMany = [pixes: Pix]
...
}
class Pix {
static belongsTo = [widget: Widget]
static namedQueries = {
selectMaxDisplayOrderForWidget { widgetInstance ->
eq('widget', widgetInstance)
projections {
max('displayOrder')
}
uniqueResult = true
}
}
...
}
Тогда:
def widget = retrieveOrCreateWidget()
def pix = new Pix(propertyA: "A", ..., displayOrder: Pix.selectMaxDisplayOrderForWidget(widget).list(), widget: widget)
Если вы хотите повторно инициализировать номера порядка отображения после удаленного Pix
, чтобы они были последовательными для Widget
, согласно вашему комментарию к @ Джарреду Олсону , вы могли бы сделать:
Pix.findAllByWidgetAndDisplayOrderGreaterThan(widget, deletedPixDisplayOrder, [sort:'displayOrder',order:'asc']).eachWithIndex { pixInstance, idx ->
pixInstance.displayOrder = deletedPixDisplayOrder + idx
pixInstance.save()
}