Grails:当尝试对列表排序时,数据会更新

Grails:当尝试对列表排序时,数据会更新,grails,Grails,我一直面临这样一种情况:下面的代码块一直以一种奇怪的方式运行。在下面的代码片段中,当我尝试在taglib中对案例工作流的活动列表进行排序时,它会执行db更新,而不仅仅是对数据进行排序。它会更新工作流行的版本。 你能告诉我哪里缺什么吗? 如能迅速提供帮助,我们将不胜感激 标记库: class CaseFormTagLib { static namespace = 'caseform' def caseForm = { attr, body ->

我一直面临这样一种情况:下面的代码块一直以一种奇怪的方式运行。在下面的代码片段中,当我尝试在taglib中对案例工作流的活动列表进行排序时,它会执行db更新,而不仅仅是对数据进行排序。它会更新工作流行的版本。 你能告诉我哪里缺什么吗? 如能迅速提供帮助,我们将不胜感激

标记库:

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] 
} 
是否必须使用
列表对其进行索引