非主要 Grails 的重复条目问题

Posted

技术标签:

【中文标题】非主要 Grails 的重复条目问题【英文标题】:Duplicate entry issue for grails on non primary 【发布时间】:2014-12-09 01:16:05 【问题描述】:

决定添加一个小日志,主要记录代码、请求 ip 和日期戳。

这是领域类

  class Requestlog 
    String countryiso
    Date requestdate
    String requestaddr
    static constraints = 
    

以及创建记录的代码

    def reqip = request.remoteAddr
    def reqdate = new Date()
    def reqrec = new Requestlog(countryiso: countryiso, requestaddr: reqip, requestdate: reqdate )
    reqrec.save(flush:true,failOnError:true)

但是如果来自同一 IP 的相同代码被请求两次(在不同时间)

Duplicate entry 'GL' for key 'UK_3noxnln23h2w0wtormncmk2a1'. Stacktrace follows:
Message: Duplicate entry 'GL' for key 'UK_3noxnln23h2w0wtormncmk2a1'
    Line | Method

问题是,我没有将任何列设置为唯一的。并且查看数据库模式,除了 id 列自动递增之外没有其他限制。

【问题讨论】:

【参考方案1】:

折腾了一会儿,我发现了这个问题。

对键“UK_3noxnln23h2w0wtormncmk2a1”的引用是键(没有双关语)。 这是一个似乎是由 grails 或 mysql 在创建时自动生成的索引,所以当我尝试在数据库中创建一个具有相同代码的新条目时,它会引发异常,因为它要求只有一个条目与指数。

我通过 mysql 工作台编辑器进入并删除了它,我的应用程序开始工作(并且希望仍在工作)

想知道是 mysql 还是 grails 设置了索引,以及是否有现在无法工作的函数。对我来说,我只写这个表,从不读,所以索引对我来说没什么区别。

请注意,如果您在 datasource.config 上创建了索引,则每次启动应用程序时都必须删除索引(不要删除名为 ID 的索引,它是您想要的长名称)。

【讨论】:

以上是关于非主要 Grails 的重复条目问题的主要内容,如果未能解决你的问题,请参考以下文章

我可以在返回消息条目字符串和参数之前获取 Grails 消息字符串吗?

如何将“非 mavenized”jar 依赖项添加到 grails 项目(Grails 3.x)

具有intellij想法2020.1的网格

Grails/Gradle 测试在非本地 CI 上失败

Grails 数据库迁移插件静默无法添加非空约束

Liquibase:关系“databasechangeloglock”已经存在,使用 grails 插件和非默认模式