2014-09-29 20 views
0

我不知道這是一個愚蠢的問題,但我需要解決這個問題。我用護目鏡搜索,但沒有結果讓我滿意。問題是>我將一些值插入表中。我使用oracle作爲數據庫和grails 2.1.1。當它在表中插入值時,行ID不以1開頭,但我需要啓動該特定表以1開頭。原因該表中只有四行,我需要通過ID插入它們,如1 ,2,3,4,這樣我就可以在應用程序的各個部分獲得它們。但它是給其他ID,然後我把它們改爲1,2,3,4。有沒有辦法在grails中的域級別做到這一點?從grails中的oracle數據庫表的第1行插入數據

回答

1

您需要創建一個oracle序列。

http://www.techonthenet.com/oracle/sequences.php

CREATE SEQUENCE sequence_name 
MINVALUE value 
MAXVALUE value 
START WITH value 
INCREMENT BY value 
CACHE value; 

CREATE SEQUENCE my_seq 
MINVALUE 1 
MAXVALUE 4 
START WITH 1 
INCREMENT BY 1 
CACHE 1; 

然後在域中指定序列

class MyDomain { 
    ... 

    static mapping = { 
    id generator:'sequence', params:[sequence:'my_seq'] 
    } 
} 

編輯:如果您使用的liquibase遷移然後使用添加一個新的變更,然後將其添加

給你changelog.groovy。

要創建序列添加變更到你的grails-app /遷移

sequence.groovy

changeSet(author: "me", id: "add-sequence") { 
    createSequence(sequenceName: "my_seq") 
} 

changelog.groovy

include file: 'sequence.groovy' 

更多選項創建使用liquibase序列看這裏:http://www.liquibase.org/documentation/changes/create_sequence.html

+0

我應該在哪裏做這個序列e在我的應用程序中以及如何獲得這個序列? – 2014-09-29 10:40:42

+0

您將不得不在oracle數據庫中創建序列。您是否使用grails liquibase插件進行遷移?或者你如何遷移/創建表格? – 2014-09-29 10:50:37

+0

database-migration-1.1 – 2014-09-29 11:26:42

0

而不是在表中創建您自己的id字段並使用序列生成您喜歡的任何id,例如:create sequence id_seq start with 1 increment by 1並在插入時使用它:insert int TABLE_NAME values (id_seq.nextval, ...);。我建議你不要依賴oracle的row_id,因爲它是由db控制的,並且是爲它的需要而生成的(另見oracle ref)。

相關問題