假设我有一家有电话号码的公司。我可能有潜在客户记录,并且想要获取电话号码的潜在客户。我是否必须首先确保我的公司不为空?
选项1
FROM Lead l WHERE l.company IS NOT NULL AND l.company.phone = :phone
选项2
FROM Lead l WHERE l.company.phone = :phone
在选项 1 中,我在检查电话之前确保公司不为空。在选项 2 中,我假设 hibernate 有办法短路它。
我尝试查找,但找不到有关此事实的文档。我也在移动自动柜员机上,所以这阻碍了我的搜索(以及我的发布!)
最佳答案
不,你不知道。 where l.company.phone = :phone
相当于inner join l.company c where c.phone = :phone
,并且内部联接只会过滤掉实体其公司为空。
这些查询最终会转换为 SQL 并由数据库执行。他们不使用您的 Java 实体。相应的 SQL 查询如下所示
from lead l, company c where l.company_id = c.id and c.phone = :phone
顺便说一句,一个简单的测试就可以让您自己找出答案。
关于java - 我是否必须防御性地保护 hql 查询中的空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54161724/