在Grails中,我想要一個具有前綴並自動增量的ID。自動增量分配的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
結合?
在Grails中,我想要一個具有前綴並自動增量的ID。自動增量分配的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
結合?
只需將主鍵保留爲整數並添加一個getter方法來派生A1,B1值。混淆像你提議的主鍵不是一個好主意。
thx,但我們需要一個描述性的ID。目前我們有'{A | B} - {randomGeneratedLong()}'。 – zatziky
這不是主鍵的工作。主鍵用於唯一標識數據庫行。如果有的話,你想要的是一個複合鍵,但GORM不鼓勵它們。 更多[here](http://stackoverflow.com/a/7383118/511250)。 –
答案是Oracle特定的,但給出了一般想法。
創建數據庫序列:
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()
}
}
}
有什麼潛在的DB? –
@mikew,它是MySQL。 – zatziky
您是否有像MySQL這樣的MySQL序列的概念? https://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm#ADMIN11792您可以將域策略設置爲分配,在保存前從序列中提取值並將字母加前綴,然後保存 –