gpt4 book ai didi

grails - Grails排序列表无法产生一致的结果-可能的休眠/休眠缓存问题

转载 作者:行者123 更新时间:2023-12-02 15:34:37 24 4
gpt4 key购买 nike

我看到一些我认为与GORM缓存有关的奇怪行为,但是我不知道如何解决该问题。我有一个带有purchaseOrderEntries列表的项目对象,每个列表都有一个开始日期。如果用户在“采购订单”状态日期中输入两位数字的年份,我会将其转换为4位数字的年份,然后对日期进行排序。但是它们排序不正确!这是重要的代码段:

def updatePurchaseOrderEntryDates(def project) {
def poEntryList = project.purchaseOrderEntries
poEntryList?.each { DateHelper.updateTwoDigitYear(it?.startDate) } // 2-digit yr

poEntryList?.sort()
log.info "list 1: " + poEntryList
poEntryList?.sort()
log.info "list 2: " + poEntryList

输出以下内容:
list 1: 1965, 2020, null
list 2: 2020, 1965, null

第二次调用相同的排序方法如何产生不同的结果?我想念什么?我觉得这是一个休眠的延迟加载或缓存或其他问题。没有线索。有任何想法吗?

*更新更多信息*
感谢您的所有想法。不幸的是,解决方案似乎并不那么容易。排序工作正常,似乎每次都起作用。这就是为什么这似乎是我不太了解的问题的原因。项目对象包含一个采购订单条目列表-这是一个列表(不是集合),并且PurchaseOrderEntry对象实现Comparable。这是代码:
class Project ... {

static hasMany = [purchaseOrderEntries:ProjectPurchaseOrderEntry, ...]

static mapping = {
purchaseOrderEntries cascade:'all-delete-orphan'
...
}

List<ProjectPurchaseOrderEntry> purchaseOrderEntries
...
}


class ProjectPurchaseOrderEntry ... implements Comparable {

Project project
Date startDate
Date endDate

...

int compareTo(obj) {
// Compare these dates in reverse older. i.e. put the newest/earliest date on the top and the oldest/null date at the end of the list
return obj.startDate <=> startDate // this comparison is done in reverse - comparator operator is null safe
}

...

}

换句话说,排序似乎工作正常。问题在这里
  poEntryList?.each { DateHelper.updateTwoDigitYear(it?.startDate) }  // 2-digit yr   
poEntryList?.sort()

即使列表中的所有日期都更新为4位数字的年份,它仍会排序,好像这些日期尚未更新。我怀疑2位数字的年份是儒略历,4位数字的年份是公历,而我的比较运算符无声地失败了。但是...为什么日期在上一个循环中之后还没有被更新?那就是我没有得到的。每个人是否都在执行SQL查询以懒惰地获取project.purchaseOrderEntries,然后再次使用它(而不是新排序的列表)?即使我将排序结果保存在新列表中,例如:
    poEntryList?.each { DateHelper.updateTwoDigitYear(it?.startDate) }  // support two digit year entry
def sortedList = poEntryList?.sort({it?.startDate})?.reverse()

新的“sortedList”仍未正确排序。我认为这是可能的唯一方法是,如果未使用更新的日期作为其排序方式。再次感谢您的所有帮助。任何想法都欢迎。这使我发疯。

最佳答案

默认情况下,Hibernate不提供任何排序​​顺序。因此,我认为它工作正常,并且您的sort()方法什么也不做。您应该提供排序顺序,如下所示:

def sortedList = poEntryList?.sort { it.startDate }

关于grails - Grails排序列表无法产生一致的结果-可能的休眠/休眠缓存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13698739/

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