Grails:当尝试对列表排序时,数据会更新
我一直面临这样一种情况:下面的代码块一直以一种奇怪的方式运行。在下面的代码片段中,当我尝试在taglib中对案例工作流的活动列表进行排序时,它会执行db更新,而不仅仅是对数据进行排序。它会更新工作流行的版本。 你能告诉我哪里缺什么吗? 如能迅速提供帮助,我们将不胜感激 标记库:Grails:当尝试对列表排序时,数据会更新,grails,Grails,我一直面临这样一种情况:下面的代码块一直以一种奇怪的方式运行。在下面的代码片段中,当我尝试在taglib中对案例工作流的活动列表进行排序时,它会执行db更新,而不仅仅是对数据进行排序。它会更新工作流行的版本。 你能告诉我哪里缺什么吗? 如能迅速提供帮助,我们将不胜感激 标记库: class CaseFormTagLib { static namespace = 'caseform' def caseForm = { attr, body ->
class CaseFormTagLib {
static namespace = 'caseform'
def caseForm = { attr, body ->
def caseWorkflow = CaseWorkflow.read(attr.workflowId)
//Line causing issue
def activityList = caseWorkflow?.sortedActivityList
}
}
域:
class CaseWorkflow {
List caseActivityList
static hasMany = [caseActivityList: CaseActivity]
@Transient
def getSortedActivityList(){
Collections.sort(this.caseActivityList)
return this.caseActivityList
}
}
class CaseActivity implements Comparable {
/**
* Activity Id
*/
Integer activityId
@Override
public int compareTo(obj) {
if(!obj || !obj.activityId) {
return 1
} else if (!this.activityId) {
return -1
} else {
return this.activityId.compareTo(obj.activityId)
}
}
}
这种行为是因为taglib中正在使用的
read()
不会自动将域刷新到数据库,除非其关联发生更改
在这种情况下,由于您正在对关联进行排序,因此会对
关联,最后自动刷新对象。通读上述链接中的说明,主要是:
但有一个例外-任何关联的集合,
例如,作者的藏书,将参与
自动冲洗和脏污检测。这是因为
集合的处理方式与常规属性不同,它们
独立于包含域管理自己的脏检查
班级
此外,默认情况下,关联是域类中的集合。如果您希望始终对关联进行排序,则可以使它们SortedSet
使具有可比性
的工作方式与您为案例活动定义的工作方式相同:
class CaseWorkflow {
SortedSet caseActivityList
static hasMany = [caseActivityList: CaseActivity]
}
是否必须使用列表对其进行索引