在Grails&中创建一个自动增量(非id)字段神谕

时间:2014-08-28 03:03:07

标签: grails

我必须跟踪每个会计年度的连续提交。鉴于2015财年'那么编号应该是2015,2015002,2015003等等。

我已经定义了一个域类来跟踪这些设置:

class MYAPPConfig {
    String fiscalYear
    Integer requestCount

    static constraints = {
        fiscalYear (size: 4..4, nullable: false)
        requestCount(max: 999, nullable: false)
    }
}

我们的想法是,在新的财政年度,我会添加一条新记录和“请求帐户”。将重置为0(或1,取决于Grails想要如何管理它)。

理想情况下,此字段应映射到Oracle序列字段。如果那不可能,那么我应该在服务方法中管理增量逻辑吗?

我的Grails版本是2.4.2

感谢。

1 个答案:

答案 0 :(得分:1)

我明白了。

我采取了不同的路线(更多谷歌搜索后)。我将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)
}

}

在我的控制器( MyTestController.groovy )中,我有:

class MyTestController {
    def manageRequestsService

    def test() {
        def trackingId = manageRequestsService.getNextTrackingId()
        render "Next id is: ${trackingId}"
    }
}

提供以下输出(http://localhost:8080/MYAPP/myTest/test):

  

下一个ID是:2015001

刷新页面!

  

下一个ID是:2015002

再次刷新!

  

下一个ID是:2015003