非主要 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 消息字符串吗?