我必须跟踪每个会计年度的顺序提交。给定财政年度“2015”,则编号应为“2015001、2015002、2015003等”。
我定义了一个域类来跟踪这些设置:
class MYAPPConfig {
String fiscalYear
Integer requestCount
static constraints = {
fiscalYear (size: 4..4, nullable: false)
requestCount(max: 999, nullable: false)
}
}
这个想法是,对于新的会计年度,我将添加一个新记录,并且'requestCount'将重置为0(或1,具体取决于Grails对其进行管理的方式)。
理想情况下,该字段应映射到Oracle序列字段。如果那不可能,那么我应该在服务方法中管理增量逻辑吗?
我的Grails版本是2.4.2
谢谢。
最佳答案
我想到了。
我选择了其他路线(经过更多谷歌搜索)。我将dateCreated
添加到了由Grails管理的模型中,因此它会自动更新。因此,我要做的就是获取具有最新日期的记录(每年我们将为下一个会计年度添加新记录)。注意调用结束时的[0]
,它使返回的数组数组变平,并允许我处理单个对象。
我的模型现在看起来像这样( MYAPPConfig.groovy ):
class MYAPPConfig {
String fiscalYear
Integer requestCount
Date dateCreated
static constraints = {
fiscalYear (size: 4..4, nullable: false)
requestCount(max: 999, nullable: false)
}
}
我创建了以下服务( ManageRequestsService.groovy )
import grails.transaction.Transactional
@Transactional
class ManageRequestService {
def getNextTrackingId() {
def latestConfig = MYAPPConfig.listOrderByDateCreated(max:1, order: "desc")[0]
def latestFiscal = latestConfig.fiscalYear
Integer sequence = latestConfig.requestCount
sequence++
latestConfig.requestCount = sequence
latestConfig.save(flush:true)
return latestFiscal + sprintf('%03d', sequence)
}
}
在我的 Controller ( MyTestController.groovy )中,我具有:
class MyTestController {
def manageRequestsService
def test() {
def trackingId = manageRequestsService.getNextTrackingId()
render "Next id is: ${trackingId}"
}
}
提供以下输出(
http://localhost:8080/MYAPP/myTest/test
):Next id is: 2015001
刷新页面!
Next id is: 2015002
再次刷新!
Next id is: 2015003
关于grails - 在Grails和Oracle中创建一个自动增量(非id)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25540060/