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