grails - 在Grails和Oracle中创建一个自动增量(非id)字段

标签 grails

我必须跟踪每个会计年度的顺序提交。给定财政年度“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/

相关文章:

grails - Grails:如何对测试应用程序进行建模?

json - 混合GSP和JSON View 时如何设置首选 View 分辨率

grails - 如何在 Grails 的 Controller 之外使用 g.message?

grails - 测试 grails Controller 抛出 java.NullPointerException

grails - 我应该在我的gsp中删除通配符域类导入吗

grails - 将Grails日志记录配置与Config.groovy分开?

grails - Gorm 问题帮助

hibernate - org.hibernate.StaleObjectStateException : Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) [com#117591]

grails - 没有ID的Grails域保存数据

grails - Grails初学者问题 “Failed to invoke Servlet 2.5”