gpt4 book ai didi

grails - Grails findById(null)返回 “random”结果

转载 作者:行者123 更新时间:2023-12-02 16:04:24 25 4
gpt4 key购买 nike

我今天在grails应用程序中发现了一个非常奇怪的行为,我想与您分享。

我们在MySQL 5.1.48上使用grails 2.3.11。

您的一个Controller Action 中有一个DomainObject.findById( id )
我们无法检查ID是否为空值,因此DomainObject.findById( null )当没有id作为参数传递时将被调用。

通常为DomainObject.findById( null )将返回null,但是有一个特殊条件会产生其他结果!

如果在此之前调用的 Controller 操作在数据库中插入了一条新记录(称为对象B),则不管存储的域对象是什么,DomainObject.findById( null )都将找到具有与对象B插入时相同的ID的 DomainObject

因此,当在保存任何内容之前调用 Controller Action 时,findById(null)将返回一行。该行将具有最后插入的元素相同的id。

我完全意识到使用findById(null)并不是理想的方法,但是我对它产生的结果感到非常震惊。但是返回任何看似“随机”的结果对我来说似乎很奇怪。

我还想指出,DomainObject.get(null)不会遭受此问题的困扰。

还有其他人目睹过吗?

有一个积极的Jira朝着这个方向发展:https://jira.grails.org/browse/GRAILS-9628,但它并未真正描述此问题。

最佳答案

我们实际上并不支持将null作为参数传递给这样的动态查找器。动态查找器明确支持按null查询。而不是DomainClass.findByName(null),您将调用DomainClass.findByNameIsNull()。如果您有一个可能为null或不为null的引用,而不是将其作为参数传递给动态查找器,则几乎总是可以通过编写条件查询或包含条件查询的“where”查询来使代码更清晰。

希望对您有所帮助。

关于grails - Grails findById(null)返回 “random”结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26974454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com