gpt4 book ai didi

grails - Grails中的自动递增整数字段

转载 作者:行者123 更新时间:2023-12-02 14:26:52 26 4
gpt4 key购买 nike

我在Grails域对象中具有int displayOrder = 1字段,并且每次域对象被保存时都希望将其递增1。

如果我有与Pix有一对多关系的域对象Widget,则每次Widget获取新的Pix时,Pix都需要增加displayOrder。

设置此设置最谨慎的方法是什么?最好从1开始计数,以在有人要更改显示顺序时将混乱降到最低。我考虑过只是复制ID,但是接下来我们可能要看displayOrder的1123,然后是1169等等,因此这不是一个实际的选择。

属于Widget的像素集合是sortedSet。

最佳答案

您还可以执行命名查询以获取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的顺序排列,请根据您对 @Jarred Olson的评论,可以执行以下操作:
Pix.findAllByWidgetAndDisplayOrderGreaterThan(widget, deletedPixDisplayOrder, [sort:'displayOrder',order:'asc']).eachWithIndex { pixInstance, idx ->
pixInstance.displayOrder = deletedPixDisplayOrder + idx
pixInstance.save()
}

关于grails - Grails中的自动递增整数字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8945545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com