gpt4 book ai didi

grails - 如何通过grails枚举排序?

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

我正在尝试按枚举排序,但在此方面出现了一些错误...

这是我正在使用的代码:

 and {
invoiceTicketDetail {
order('date', 'asc')
order('code', 'asc')
}
}
lineType {
order('sortOrder', 'asc')
}

lineType是一个Enum,并且有一个名为sortOrder的int属性,可以正确地对lineType进行排序。
问题是当我尝试执行此操作时出现以下错误
No signature of method: InvoiceService.lineType() is applicable for argument types: (InvoiceService$_tt__getInvoiceDetailList_closure36_closure57) values: [InvoiceService$_tt__getInvoiceDetailList_closure36_closure57@3c7c8544]
Possible solutions: asType(java.lang.Class), asType(java.lang.Class). Stacktrace follows:
groovy.lang.MissingMethodException: No signature of method: InvoiceService.lineType() is applicable for argument types: (InvoiceService$_tt__getInvoiceDetailList_closure36_closure57) values: [InvoiceService$_tt__getInvoiceDetailList_closure36_closure57@3c7c8544]
Possible solutions: asType(java.lang.Class), asType(java.lang.Class)
at InvoiceService$_$tt__getInvoiceDetailList_closure36$$EPQTbhPk.doCall(InvoiceService.groovy:477)

InvoiceService是我正在使用的服务,但它不是主要对象。如果我只是删除lineType行,则可以正常工作,但是我需要在此组织中添加此lineType。

还有其他方法可以按复杂对象的多列对其进行排序吗?

最佳答案

您无法按lineType.sortOrder进行排序,因为GORM / Hibernate会按domain / entity属性进行排序。它最终是数据库列,但是您不能使用sort()指定数据库列。 lineType是一个域属性,但lineType.sortOrder不是,(它是一个枚举属性)。按lineType排序将按枚举的序数值排序。这就是您将看到的存储在数据库中的内容。

按SQLProjection排序

最复杂的方法(提示,可能不值得)是为枚举创建一个Hibernate User Type,以便您可以将排序值存储在单独的数据库列中。使用此类列,然后可以使用SQLProjection动态创建属性并对其进行排序。这种方法的缺点是您将无法返回根实体的实例(例如SomeDomain.withCriteria()中的SomeDomain)。相反,您可以返回实例ID:

def ids = DomainClass.withCriteria {
and {
invoiceTicketDetail {
order('date', 'asc')
order('code', 'asc')
}
}

projections {
property('id')
sqlProjection 'the_added_column as sortOrder', 'sortOrder', org.hibernate.type.IntegerType as org.hibernate.type.Type
}

sort('sortOrder')
}

添加新的域属性

您可以将新属性(例如sortOrder)直接添加到域类。

Groovy

您可以在Groovy中在客户端进行排序。
DomainClass.withCriteria {
and {
invoiceTicketDetail {
order('date', 'asc')
order('code', 'asc')
}
}
}.toSorted { it.lineType.sortOrder }

关于grails - 如何通过grails枚举排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33004522/

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