Java 我是否必须在hql查询中保护空值?
假设我有一家有电话号码的公司。我可能有潜在客户记录,我想获得一个电话号码的潜在客户。我必须首先确保我的公司不为空吗 选择1Java 我是否必须在hql查询中保护空值?,java,hibernate,hql,Java,Hibernate,Hql,假设我有一家有电话号码的公司。我可能有潜在客户记录,我想获得一个电话号码的潜在客户。我必须首先确保我的公司不为空吗 选择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有一种短路的方法 我试过查找,但找不到有关此事实的文档。
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有一种短路的方法
我试过查找,但找不到有关此事实的文档。我也在使用移动atm,所以这妨碍了我的搜索(以及我的发帖!)不,你没有
其中l.company.phone=:phone
相当于内部联接l.company c其中c.phone=:phone
,内部联接将简单地过滤掉具有空公司的实体
这些查询最终转换为SQL并由数据库执行。他们不使用您的Java实体。相应的SQL查询如下所示
from lead l, company c where l.company_id = c.id and c.phone = :phone
顺便说一句,一个简单的测试可以让你自己找到答案。这取决于:
l.company
是否会为空?是的,这是可能的。例如,潜在客户可能是没有公司的人。事实上,我担心的是,如果公司为空,查询就会中断,比如空指针异常或其他什么。我碰巧在一个会议上,没有简单的方法来测试atm,但这与我们正在进行的讨论有关。谢谢你的解释!