决定添加一个基本上记录代码的日志,请求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列自动递增之外没有任何约束。
答案 0 :(得分:0)
在摆弄了一段时间后,我发现了这个问题。
对密钥的引用' UK_3noxnln23h2w0wtormncmk2a1'是关键(没有双关语)。 这是一个似乎是由grails或mysql在创建时自动生成的索引,所以当我尝试在数据库中创建一个具有相同代码的新条目时,它会抛出一个异常,因为它要求只有一个条目匹配指数。
我通过mysql workbench编辑器进入并删除了它,我的应用程序开始工作(并且仍在继续工作)
知道是否是设置索引的mysql或grails以及是否有现在无效的函数会很有趣。对我来说,我只是写这个表,从不阅读,所以索引对我来说没什么区别。
请注意,如果您在datasource.config上创建,则每次启动应用程序时都必须删除索引(并且不要删除名为ID的ID,它是具有您想要的长名称的ID)