【发布时间】:2015-01-14 11:15:23
【问题描述】:
我今天在我们的 grails 应用程序中发现了一个非常奇怪的行为,我想与您分享。
我们在 mysql 5.1.48 上使用 grails 2.3.11。
我们在您的一个控制器操作中有一个DomainObject.findById( id )。
我们未能检查 id 的空值所以DomainObject.findById( null )
当没有 id 作为参数传递时将被调用。
通常DomainObject.findById( null )
将返回 null 但有一个特殊条件会产生其他结果!
如果之前调用的控制器操作在数据库中插入了一条新记录(我们称之为对象 B),无论存储的域对象如何,DomainObject.findById( null ) 都会找到具有相同的 DomainObject对象 B 是否已插入。
因此,当在保存任何内容之前调用的控制器操作时,findById(null) 将返回一行。并且该行将具有与最后插入的元素相同的 id。
我完全知道使用findById(null) 不是理想的方法,但我对它产生的结果感到非常震惊。但是返回任何看似“随机”的结果对我来说似乎很奇怪。
我还要注意DomainObject.get(null) 不会遇到这个问题。
其他人目睹了这一点吗?
有一个活跃的 Jira 指向这个方向:https://jira.grails.org/browse/GRAILS-9628,但它并没有真正描述这个问题。
【问题讨论】:
标签: grails null grails-orm dynamic-finders