在Grails中,我希望有一个带有前缀且自动增量的id。
我会有这些前缀:A
和B
。
然后我会有以下顺序:
new MyObject('A').save()
---> id = A-1
new MyObject('A').save()
---> id = A-2
new MyObject('B').save()
---> id = A-3
等等......是否可以将assigned
生成器与auto-increment
结合使用?
答案 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值。像你一样建议使用主键是不是一个好主意。