Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否必须在hql查询中保护空值?_Java_Hibernate_Hql - Fatal编程技术网

Java 我是否必须在hql查询中保护空值?

Java 我是否必须在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有一种短路的方法 我试过查找,但找不到有关此事实的文档。

假设我有一家有电话号码的公司。我可能有潜在客户记录,我想获得一个电话号码的潜在客户。我必须首先确保我的公司不为空吗

选择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有一种短路的方法


我试过查找,但找不到有关此事实的文档。我也在使用移动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,但这与我们正在进行的讨论有关。谢谢你的解释!