非主要的grails重复输入问题

时间:2014-10-14 09:41:57

标签: mysql grails

决定添加一个基本上记录代码的日志,请求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 个答案:

答案 0 :(得分:0)

在摆弄了一段时间后,我发现了这个问题。

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

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

知道是否是设置索引的mysql或grails以及是否有现在无效的函数会很有趣。对我来说,我只是写这个表,从不阅读,所以索引对我来说没什么区别。

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