具有自动增量的已分配ID

时间:2017-03-16 09:01:26

标签: grails gorm

在Grails中,我希望有一个带有前缀且自动增量的id。

我会有这些前缀:AB

然后我会有以下顺序:

new MyObject('A').save() ---> id = A-1

new MyObject('A').save() ---> id = A-2

new MyObject('B').save() ---> id = A-3

等等......是否可以将assigned生成器与auto-increment结合使用?

2 个答案:

答案 0 :(得分:1)

答案是针对Oracle的,但提供了一般性的想法。

在DB中创建序列:

create sequence MY_SEQ minvalue 1 maxvalue 9999999 start with 1 increment by 1;

然后在Grails:

class MyService {

    def dataSource

    def save( params ) {
        def myDom = new MyDomain( params )
        myDom.id = generateId()
        myDom.save()
    }

    def generateId() {
        def db
        try {
            db = Sql.newInstance( dataSource )
        "A-${db.firstRow( 'SELECT MY_SEQ.NEXTVAL NEXT_ID FROM DUAL' ).NEXT_ID}"
        }
        finally {
            db?.close()
        }
    }
}

答案 1 :(得分:0)

将主键保留为整数,并添加getter方法以获取A1,B1值。像你一样建议使用主键是不是一个好主意。