在grails中的oracle数据库表中的第1行插入数据

时间:2014-09-29 08:46:56

标签: oracle grails grails-2.0

我不知道这是一个愚蠢的问题,但我需要解决这个问题。我用护目镜搜索但没有结果让我满意。问题是>我在表中插入一些值。我使用oracle作为数据库和grails 2.1.1。当它在表中插入值时,行id不以1开头,但我需要启动该特定表以1开头。原因该表中只有四行,我需要按id插入它们,如1 ,2,3,4,以便我可以在应用程序的各个部分得到它们。但它正在给予其他身份,之后我将它们改为1,2,3,4。有没有办法在grails的域级别中执行此操作?

2 个答案:

答案 0 :(得分: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 / migrations中添加changeSet

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

答案 1 :(得分: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)。