sql - 如何设置插入到具有下一个序列号的 grails 创建的文件?

标签 sql postgresql grails

我正在使用 JMS 队列读取数据并将数据插入到由 grails 创建的 postgres 表中。问题是获取下一个序列值。我以为我已经通过以下语句找到了解决方案(通过将“DEFAULT”放在 ID 应该去的地方),但它不再有效。我一定改变了什么,因为我需要重新创建表格。解决此问题的最佳方法是什么?

ps = c.prepareStatement("插入 xml_test (id, version, xml_text) 值(默认值,0,?)”);

更新:

为了响应建议的解决方案,我执行了以下操作:

将其添加到域中:

class XmlTest {
    String xmlText
    static constraints = {
        id generator:'sequence', params:[name:'xmltest_sequence']
    }
}

并将插入语句更改为以下内容:

ps = c.prepareStatement("INSERT INTO xml_test (id, version, xml_text) 
VALUES (nextval('xmltest_sequence'), 0, ?)");

但是,当我运行该语句时,出现以下错误:

[java] 1 org.postgresql.util.PSQLException:错误:关系“xmltest_sequence”不存在

有什么想法吗?

最佳答案

在您的情况下,您可以使用 nextval 函数获取 PostgreSQL 中任何序列的值:

INSERT INTO xml_test (id, version, xml_text) VALUES (nextval('sequence_name_for_this_table'), 0, ?);

在您的 grails 域类中,您可以选择序列名称:

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

关于sql - 如何设置插入到具有下一个序列号的 grails 创建的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2822623/

相关文章:

sql - 查询匹配所有的IN

node.js - 如何将 Node docker 容器与 postgres docker 容器连接

grails - 关于使用 “soft”加入的Grails GORM域类的问题

sql - PGAdmin 中所有函数的搜索文本

sql - 如何使用 IN 查询匹配的电子邮件?

sql - SQL Server 中区分大小写的变量名称?

sql - 行 = result.fetchone() 属性错误 : 'NoneType' object has no attribute 'fetchone'

postgresql - 当我的注册表中不存在用户 DSN 时,如何删除它们

grails - “each in”/ “none in”的Gorm标准

apache - 如何在 Apache Tomcat 服务器上部署 IntelliJ IDEA 项目?