我在带有Date字段的Grails 2.2.5 Web应用程序中遇到了一个相当令人费解的问题。我有一个策略域类,其中包含一个'已发布的'属性,Date类型。它没有特殊的映射,因此默认值将用于GORM。在MySQL数据库中,它定义如下:
issued
datetime DEFAULT NULL
当我将日期(例如新的日期())分配给'已发布时,我可以从日志中看到它已被正确分配:
2014-11-12 06:55:53,014 [http-bio-127.0.0.1-8001-exec-3] INFO test.PolicyService - 记录发布日期为2014年11月12日星期三06:55:53 EST
但是当我再次测试它时,紧接在policy.save()之后,它失去了时间组件:
2014-11-12 06:55:53,051 [http-bio-127.0.0.1-8001-exec-3] INFO test.PolicyService - 保存后的发布日期= 2014年11月12日星期三00:00:00
我看不出这可能是什么原因。列的数据类型当然可以占用一个时间组件(我可以明确设置一个)。不知何故,时间组件正在被删除,我真的不知道在哪里看。
答案 0 :(得分:0)
答案,谢天谢地,原来是编码错误,而不是一些奇怪的MySQL / Grails错误。我一直都很确定必须如此,但是我们无法看到它的位置。但最后我发现了罪魁祸首埋没在“后更新”中。事件处理程序我曾经复制过#39;发布的'属性到另一个日期变量,后来在该对象上使用了clearTime(),忘记了这也可以清除发布的'属性(因为,当然,它根本不是一个副本,只是对同一个对象的新引用)。我更改了它以使用一个新的Date对象,该对象是使用来自发布的'中的getTime()初始化的。物业,一切都很好。笨拙的错误!
我错过了这个,因为我正在寻找任何价值被分配给“发布”的地方,而且这不属于该类别。